Python 从数据帧打印出现次数
我有一个有两列的数据框。其中一个包含时间戳,另一个包含某个操作的一个id。诸如此类:Python 从数据帧打印出现次数,python,matplotlib,pandas,Python,Matplotlib,Pandas,我有一个有两列的数据框。其中一个包含时间戳,另一个包含某个操作的一个id。诸如此类: 2000-12-29 00:10:00 action1 2000-12-29 00:20:00 action2 2000-12-29 00:30:00 action2 2000-12-29 00:40:00 action1 2000-12-29 00:50:00 action1 ... 2000-12-31 00:10:00 action1 2000-12-31
2000-12-29 00:10:00 action1
2000-12-29 00:20:00 action2
2000-12-29 00:30:00 action2
2000-12-29 00:40:00 action1
2000-12-29 00:50:00 action1
...
2000-12-31 00:10:00 action1
2000-12-31 00:20:00 action2
2000-12-31 00:30:00 action2
我想知道在某一天里,有多少特定类型的动作被执行。
也就是说,对于每一天,我需要计算actionX的出现次数,并用X轴上的日期和Y轴上的actionX出现次数绘制该数据
当然,我可以通过遍历数据集天真地计算每天的动作。但是熊猫/matplotlib的“正确方法”是什么呢?从
mydate col_name
0 2000-12-29 00:10:00 action1
1 2000-12-29 00:20:00 action2
2 2000-12-29 00:30:00 action2
3 2000-12-29 00:40:00 action1
4 2000-12-29 00:50:00 action1
5 2000-12-31 00:10:00 action1
6 2000-12-31 00:20:00 action2
7 2000-12-31 00:30:00 action2
你能行
df['mydate'] = pd.to_datetime(df['mydate'])
df = df.set_index('mydate')
df['day'] = df.index.date
counts = df.groupby(['day', 'col_name']).agg(len)
但也许有一种更直接的方法。无论如何,上述方法都应该有效
如果您想使用计数作为数据帧,我会将其转换回来
counts = pd.DataFrame(counts, columns=['count'])
您可以使用
df.groupby([df.index.date, 'action']).count()
也可以使用此方法直接绘图
df.groupby([df.index.date, 'action']).count().plot(kind='bar')
您也可以将结果存储到
count
中,然后单独绘制。这是假设您的索引已经是datetimeindex格式,否则请按照上面@mkln的说明操作。谢谢您的回答!我将代码中的最后一行更改为:counts=df.groupby([df.day.to_period('D'),'col_name']).agg(len)
,因为我需要按天而不是按索引中的确切时间对数据进行分组。它起作用了,给了我多索引的序列对象。但是,我仍然无法绘制这些数据,因为我无法取消堆叠它们。我在这里单独问了一个问题,似乎有一个bug。但是由于unstack
不起作用,也许有另一种方法来绘制这些数据?ThanksIt通常用于按顺序获得结果,因此我会将order()
添加到管道中