Подсчитайте частоту появления в столбце - PullRequest
1 голос
/ 12 октября 2019

Я пытаюсь подсчитать вхождения значений во фрейме данных, который содержит столбец даты и времени ('%Y-%m-%d %H:%M:%S').

Данные:

Date                        Employee        Operation        Order

2001-01-01 08:32:17         User1           Approved         #00045
2001-01-01 08:36:23         User1           Edited           #00045
2001-01-01 08:41:04         User1           Rejected         #00046
2001-01-01 08:42:56         User1           Deleted          #00046
2001-01-02 09:01:11         User1           Created          #00047
...
2019-10-03 17:23:45         User1           Approved         #72681

Проблема, с которой я столкнулся, связана с подсчетом повторений определенных операций каждый день. Точнее, я пытаюсь построить диаграмму, которая будет отображать тенденции того, как Пользователь1 обработал свои заказы, например, показать, что Пользователь 2005 имеет большое количество операций отклонения / удаления в 2005 году и большое количество утвержденных / завершенных операций. в 2019 году. Цель состоит в том, чтобы научиться анализировать большие куски данных.

Я прочитал этот ответ , который как бы связан с моим вопросом. Однако проблема в том, что df, используемый в этом вопросе, содержит только 2 столбца. Мой DF содержит 4 столбца. Означает ли это, что мне нужно сначала создать новый df (pseudo: df1 = df['Date'] + df['Operation']), который содержит только 2 определенных столбца, или есть какой-то другой способ сделать это?

1 Ответ

0 голосов
/ 12 октября 2019

Я думаю, что лучше всего создавать группы на основе дня, пользователя и операции. Для этого вы можете использовать groupby + dt.date. Затем вы можете посчитать вхождения каждой группы, используя groupby.count. Вы можете использовать unstack для создания фрейма данных, подобного тому, который я вам покажу ниже:

#df=df.reset_index() #only if date is the index
#df['Date']=pd.to_datetime(df['Date']) # If Date not is datetime
new_df=df.groupby([df['Date'].dt.date,'Employee','Operation'])['Operation'].count().unstack(fill_value=0)
print(new_df)

Operation            Approved  Created  Deleted  Edited  Rejected
Date       Employee                                              
2001-01-01 User1            1        0        1       1         1
2001-01-02 User1            0        1        0       0         0

Также вы можете использовать dt.year для группировки по году вместо дня:

new_df=df.groupby([df['Date'].dt.year,'Employee','Operation'])['Operation'].count().unstack(fill_value=0)
print(new_df)
Operation      Approved  Created  Deleted  Edited  Rejected
Date Employee                                              
2001 User1            1        1        1       1         1

или по году и месяцу :

new_df=df.groupby([df['Date'].dt.year,df['Date'].dt.month,'Employee','Operation'])['Operation'].count().unstack(fill_value=0)
print(new_df)
Operation           Approved  Created  Deleted  Edited  Rejected
Date Date Employee                                              
2001 1    User1            1        1        1       1         1

Подробности

1. DataFrame для примера:

df

                 Date Employee Operation   Order
0 2001-01-01 08:32:17    User1  Approved  #00045
1 2001-01-01 08:36:23    User1    Edited  #00045
2 2001-01-01 08:41:04    User1  Rejected  #00046
3 2001-01-01 08:42:56    User1   Deleted  #00046
4 2001-01-02 09:01:11    User1   Created  #00047
Если Дата не является столбцом, вы должны использовать df=df.reset_index(). Для перевода даты в дату и время используйте df['Date']=pd.to_datetime(df['date'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...