Я думаю, что лучше всего создавать группы на основе дня, пользователя и операции. Для этого вы можете использовать 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'])