Pandas:在数据帧组之后重新采样时间组名称

时间:2016-08-17 00:31:14

标签: python pandas dataframe time-series

我的数据框看起来像

Time,                           Id             A               B            C                                                                            
2016-06-15 08:09:26.212962  115516             3           3.238     7.790000   
2016-06-15 08:10:13.863304  115517             3           0.000     8.930000   
2016-06-15 08:11:02.236033  115518             3           0.000     9.090000   
2016-06-15 08:11:52.085754  115519             3           0.000     9.420000  

如果我像

那样申请分组
grouped = df.groupby(pd.TimeGrouper("5Min"), as_index=False)

我得到的群组名称和群组如下:

2016-06-15 08:05:00
    2016-06-15 08:09:26.212962
2016-06-15 08:10:00
    2016-06-15 08:10:13.863304
    2016-06-15 08:11:02.236033
    2016-06-15 08:11:52.085754
2016-06-15 08:25:00
    2016-06-15 08:25:41.827770

所以我的问题是我如何重新采样上面形成的组名称并用“无”填充不存在的组来获得类似的内容:

2016-06-15 08:05:00
    2016-06-15 08:09:26.212962
2016-06-15 08:10:00
    2016-06-15 08:10:13.863304
    2016-06-15 08:11:02.236033
    2016-06-15 08:11:52.085754
2016-06-15 08:15:00
2016-06-15 08:20:00
2016-06-15 08:25:00
    2016-06-15 08:25:41.827770

这可以形成为数据帧吗?

此致

2 个答案:

答案 0 :(得分:0)

最简单的方法是将它们组成另一个DataFrame。使用pd.concat

frames, names = [], []

grouped = df.groupby(pd.TimeGrouper("5Min"), as_index=False)
for name, group in grouped:
    names.extend([name])
    frames.extend([group])

pd.concat(frames, keys=names)

答案 1 :(得分:0)

这是我现在能想到的最好的。

df.set_index('Time').groupby(pd.TimeGrouper('5T')) \
    .apply(lambda df: df.reset_index()).unstack() \
    .resample('5T').last().stack(dropna=False)