Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从数据帧打印出现次数_Python_Matplotlib_Pandas - Fatal编程技术网

Python 从数据帧打印出现次数

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

我有一个有两列的数据框。其中一个包含时间戳,另一个包含某个操作的一个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 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()
添加到管道中