在 pandas 中聚合和绘制时间序列
Aggregate and plot time series in pandas
我有一个以日期为索引的数据框。我想计算每两周聚合一次的事件和情节。示例:
date id
2018-01-01 a1
2018-01-01 a2
2018-01-05 a3
2018-01-12 a4
2018-01-15 a5
2018-01-17 a6
2018-01-19 a7
...
应该显示为(格式是说明性的,如果我能够区分就可以了):
2018-01-1 4
2018-01-2 3
...
然后剧情。
如果可能的话,我想要一个参数,这样我就可以切换到每周或每月。
如果日期是索引,您可以使用 resample
和 SemiMonthStart ('SMS') 频率:
df.index = pd.to_datetime(df.index)
df.resample('SMS').count()
输出:
id
date
2018-01-01 4
2018-01-15 3
您还可以使用 date offsets (here SemiMonthBegin
) 来四舍五入您的日期并将此结果用于 groupby
+count
:
group = (pd.to_datetime(df['date'])
.apply(pd.offsets.SemiMonthBegin().rollback)
)
out = df.groupby(group)['id'].count()
输出:
date
2018-01-01 4
2018-01-15 3
Name: id, dtype: int64
我有一个以日期为索引的数据框。我想计算每两周聚合一次的事件和情节。示例:
date id
2018-01-01 a1
2018-01-01 a2
2018-01-05 a3
2018-01-12 a4
2018-01-15 a5
2018-01-17 a6
2018-01-19 a7
...
应该显示为(格式是说明性的,如果我能够区分就可以了):
2018-01-1 4
2018-01-2 3
...
然后剧情。
如果可能的话,我想要一个参数,这样我就可以切换到每周或每月。
如果日期是索引,您可以使用 resample
和 SemiMonthStart ('SMS') 频率:
df.index = pd.to_datetime(df.index)
df.resample('SMS').count()
输出:
id
date
2018-01-01 4
2018-01-15 3
您还可以使用 date offsets (here SemiMonthBegin
) 来四舍五入您的日期并将此结果用于 groupby
+count
:
group = (pd.to_datetime(df['date'])
.apply(pd.offsets.SemiMonthBegin().rollback)
)
out = df.groupby(group)['id'].count()
输出:
date
2018-01-01 4
2018-01-15 3
Name: id, dtype: int64