计算列中出现的频率

2024-04-25 06:27:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图统计包含datetime列('%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列。这是否意味着我需要首先创建一个新的df(pseudo: df1 = df['Date'] + df['Operation']),它只包含2个特定的列,或者有其他方法可以做到这一点?你知道吗


Tags: 数据dfdatetimedateemployeeorder次数operation
1条回答
网友
1楼 · 发布于 2024-04-25 06:27:52

我认为最好根据日期、用户和时间创建组操作。用于您可以使用^{}+^{}。 然后可以使用^{}计算每个组的出现次数。您可以使用^{}生成如下所示的数据帧:

#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。数据帧示例:

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
  1. 如果Date不是一列,那么应该使用df=df.reset_index()。要将日期转换为日期时间,请使用df['Date']=pd.to_datetime(df['date'])

相关问题 更多 >