绘制Pandas DataFrame中出现的次数

Tim*_*fey 9 python matplotlib pandas

我有一个包含两列的DataFrame.其中一个包含时间戳和另一个 - 某个动作的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
Run Code Online (Sandbox Code Playgroud)

我想知道在某一天已经执行了多少某种类型的动作.即每天,我需要计算actionX的出现次数,并为每个日期绘制此数据,其中X轴上的日期和Y轴上的actionX的出现次数.

当然,只要迭代我的数据集,我就可以天真地计算每一天的行动.但是用pandas/matplotlib做什么是"正确的方法"?

Dav*_*gan 18

你可以通过使用获得计数

df.groupby([df.index.date, 'action']).count()
Run Code Online (Sandbox Code Playgroud)

或者您可以使用此方法直接绘图

df.groupby([df.index.date, 'action']).count().plot(kind='bar')
Run Code Online (Sandbox Code Playgroud)

您也可以将结果存储到count然后单独绘制.这假设您的索引已经是datetimeindex格式,否则请遵循上面@mkln的说明.

  • 按顺序获取结果是非常有用的,所以我将`order()`添加到管道中 (2认同)

mkl*_*kln 5

从...开始

                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
Run Code Online (Sandbox Code Playgroud)

你可以做

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)
Run Code Online (Sandbox Code Playgroud)

但也许有一种更直接的方式.无论如何,上述应该是有效的.

如果你想将count用作DataFrame,我会将其转换回来

counts = pd.DataFrame(counts, columns=['count'])
Run Code Online (Sandbox Code Playgroud)