我正在尝试计算包含日期时间列('%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
我遇到的问题与每天计数特定操作的发生有关。更确切地说,我正在尝试构建一个图表,以显示User1如何处理其订单的趋势,例如能够表明User1在2005年具有大量拒绝/删除操作,在2019年具有大量已批准/完成操作。目的是学习如何解析大块数据。
我已经读过this answer,这和我的问题有关。但是,问题在于此问题中使用的df仅包含2列。我的df包含4列。这是否意味着我需要首先创建一个仅包含2个特定列的新df (pseudo: df1 = df['Date'] + df['Operation'])
,还是有其他方法可以实现?
答案 0 :(得分:0)
我认为最好根据日期,用户和操作创建组。为此,您可以使用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
或按年份和month:
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'])