groupby timeseries用0填充缺失数据

时间:2017-08-25 20:49:55

标签: python pandas dataframe time-series pandas-groupby

鉴于熊猫时间序列数据框按“UUT'

分组”
df
Out[64]: 
                        UUT  Sum
Date_Time                       
2017-04-28 18:48:16  uut-01    2
2017-04-28 18:48:18  uut-02    2
2017-04-28 18:48:19  uut-03    2

我想使用reindex以1秒的间隔创建一个时间序列,并仅为列Sum填充0值的空白,类似于下面显示的内容:

df
Out[64]: 
                        UUT  Sum
Date_Time                       
2017-04-28 18:48:16  uut-01    2
2017-04-28 18:48:16  uut-02    0
2017-04-28 18:48:16  uut-03    0
2017-04-28 18:48:17  uut-01    2
2017-04-28 18:48:17  uut-02    0
2017-04-28 18:48:17  uut-03    0
2017-04-28 18:48:18  uut-01    0
2017-04-28 18:48:18  uut-02    2
2017-04-28 18:48:18  uut-03    0
2017-04-28 18:48:19  uut-01    0
2017-04-28 18:48:19  uut-02    0
2017-04-28 18:48:19  uut-03    2

我使用了reindex,但它填补了UUT'和' Sum'用零。 如何使用uut名称而不是零来填充UUT列的缺失时间戳,并将零填充为' Sum'仅限列?

idx = pd.date_range('2017-04-28 18:48:16', '2017-04-28 18:48:19', freq='1s')    
grouped = df.groupby('UUT')
grouped.get_group('uut-01').reindex(idx, fill_value=0)

grouped.get_group('uut-01')

2017-04-28 18:48:16  uut-01    2
2017-04-28 18:48:17  0         0
2017-04-28 18:48:18  0         0
2017-04-28 18:48:19  0         0

根据凯尔的回答,我最终得到了它的工作:

df = df.set_index([df.index, 'UUT'])
idx = pd.MultiIndex.from_product(df.index.levels, names=['Date_Time', 'UUT'])
df = df.reindex(index=idx, fill_value=0)
df.reset_index(level=[1]) #convert back to single index
grouped = df.groupby('UUT')

1 个答案:

答案 0 :(得分:1)

df = df.set_index(['time', 'uut'])
idx = pd.MultiIndex.from_product([df.index, df.uut])
df.reindex(index=idx, fill_value=0)

                   sum
18:48:16 uut-01    2
         uut-02    0
         uut-03    0
18:48:18 uut-01    0
         uut-02    2
         uut-03    0
18:48:19 uut-01    0
         uut-02    0
         uut-03    2