计算列中的出现频率

时间:2019-10-12 13:04:14

标签: python pandas dataframe

我正在尝试计算包含日期时间列('%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']),还是有其他方法可以实现?

1 个答案:

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