首页 > 解决方案 > 按 ID 分组并完成时间序列 Pandas

问题描述

我有一个观察一个 ID 的 pandas 数据框,我遇到的问题与此处解决的问题类似。

Timestamp              ID
2014-10-16 15:05:17    123
2014-10-16 14:56:37    148
2014-10-16 14:25:16    123
2014-10-16 14:15:32    123
2014-10-16 13:41:01    123
2014-10-16 12:50:30    148
2014-10-16 12:28:54    123
2014-10-16 12:26:56    123
2014-10-16 12:25:12    123
...
2014-10-08 15:52:49    150
2014-10-08 15:04:50    150
2014-10-08 15:03:48    148
2014-10-08 15:02:27    200
2014-10-08 15:01:56    236
2014-10-08 13:27:28    147
2014-10-08 13:01:08    148
2014-10-08 12:52:06    999
2014-10-08 12:43:27    999
Name: summary, Length: 600

在提到的帖子中,他们展示了如何按 ID 分组以及如何进行计数。使用df['Week/Year'] = df['Timestamp'].apply(lambda x: "%d/%d" % (x.week, x.year))我现在有这个:

   Timestamp               ID     Week/Year
0  2014-10-16 15:05:17     123    42/2014
1  2014-10-16 14:56:37     150    42/2014
2  2014-10-16 14:25:16     123    42/2014

我的问题是,现在我想制作一个时间序列,所以实际上,我需要:

Category    Week_42_2014    Week_43_2014    Week_44_2014    
123         7              0              6
150         0              0              2              ...

也就是说,我需要将周作为一列,将类别作为行,并且还需要在没有观察的情况下填补周的空白。就我而言,我也需要几天,但我想它真的很相似。

谢谢,

标签: pythonpandasdataframetime-series

解决方案


您可以使用pd.pivot_table

res = df.pivot_table(index='ID', columns='Week/Year', aggfunc='count', fill_value=0)

print(res)

          Timestamp        
Week/Year   41/2014 42/2014
ID                         
123               0       7
147               1       0
148               2       2
150               2       0
200               1       0
236               1       0
999               2       0

推荐阅读