Фрейм данных Python, отслеживающий процентное изменение столбцов за два месяца. Введите месяц вручную

#python #pandas #input #percentage

#python #pandas #ввод #процент

Вопрос:

Я пытаюсь сделать то, что мне кажется сложным. Было бы очень здорово, если бы кто-нибудь мог помочь мне с этой мультиоперацией. Во-первых, у меня есть фрейм данных ‘df’, который отслеживает статистику сотен учетных записей пользователей веб-сайта. Столбец «Учетная запись» содержит имя учетной записи, столбец «Пользователи» содержит количество пользователей под каждой учетной записью, и есть двенадцать столбцов «Вход в систему (месяц)», которые отслеживают количество входов в систему для каждой учетной записи.

Пример df:

 Account     Users     Logins in January     Logins in February      Logins in March     Logins in April
Nike         148            68                      94                   72                   87
Adidas       654           134                     192                    248                   324
Apple        43             23                      40                   32                    29
Tesla        864           651                      598                   691                  439
  

Я бы хотел, чтобы пользователь этой операции ввел месяц, например, март. Затем ячейка вернет процентное изменение логинов с февраля по март в формате фрейма данных. Что-то вроде этого:

Ввод:

 Please input Month:  (This is where the user type in the month in interest)
  

Вывод:

 Account     Logins in February      Logins in March     Percentage Change (%)
Nike              94                       72                    -23               
Adidas            192                      248                    29                
Apple              40                      32                    -20              
Tesla             598                      691                    16
  

Еще раз спасибо! Я действительно ценю любую помощь в этом!

Ответ №1:

Используйте pandas.DataFrame.filter с pct_change :

 input_ = "Mar"
df2 = df.set_index("Account").filter(regex="Feb|%s" % input_).copy()
df2["Percentage Change (%)"] = df2.pct_change(axis=1).iloc[:, -1].mul(100).round()
print(df2)
  

Вывод:

          Logins in February  Logins in March  Percentage Change (%)
Account                                                            
Nike                     94               72                  -23.0
Adidas                  192              248                   29.0
Apple                    40               32                  -20.0
Tesla                   598              691                   16.0
  

Комментарии:

1. Спасибо за ваш ответ! Часть с процентным изменением работает действительно хорошо. Тем не менее, я бы также хотел, чтобы df2 отображал столбец Account. Есть ли какой-либо способ сделать это? Я ценю вашу помощь!

2. @MatthiasGallagher Я отредактировал, чтобы отразить изменение 😉

3. Еще раз спасибо за редактирование! Я понял, что на выходе получается массив, а не фрейм данных, и что имена столбцов не выровнены. Это тоже можно исправить? Очень признателен!!

4. @MatthiasGallagher Как вы получили массив? какая строка произвела это? кроме того, для выравнивания, это потому, что индекс имеет имя account . Если вы хотите, чтобы он вел себя как столбец, попробуйте df2.reset_index()

5. Проблема решена. Это строка печати (df2). Большое вам спасибо за вашу помощь!