如何在pandas数据帧的groupby中添加NaN元素?

时间:2018-06-14 16:55:37

标签: python pandas

我有数据:

    id                 time           w
0   39  2018-03-01 00:00:00 1176.000000
1   39  2018-03-01 01:45:00 1033.461538
2   39  2018-03-01 02:00:00 1081.066667
3   39  2018-03-01 02:15:00 1067.909091
4   39  2018-03-01 02:30:00 1026.600000
5   39  2018-03-01 02:45:00 1051.866667

我从原始数据每15分钟就有一次。

但我想提出:

    id                 time           w
0   39  2018-03-01 00:00:00 1176.000000
1   39  2018-03-01 00:15:00     NaN
2   39  2018-03-01 00:30:00     NaN
.   39      ...      ...        ...
.   39      ...      ...        ...
.   39  2018-03-01 01:30:00     NaN
1   39  2018-03-01 01:45:00 1033.461538
2   39  2018-03-01 02:00:00 1081.066667
3   39  2018-03-01 02:15:00 1067.909091
4   39  2018-03-01 02:30:00 1026.600000
5   39  2018-03-01 02:45:00 1051.866667

我尝试使用this,但这不起作用。

像这样:

showData = Data.groupby(['id', pd.Grouper(key='time',freq='15T')])
['w'].mean().replace('',np.nan).reset_index()

我真的需要你的帮助。非常感谢。

1 个答案:

答案 0 :(得分:4)

只需使用resample

df.resample('15min', on='time').mean()

                       id            w
time                                  
2018-03-01 00:00:00  39.0  1176.000000
2018-03-01 00:15:00   NaN          NaN
2018-03-01 00:30:00   NaN          NaN
2018-03-01 00:45:00   NaN          NaN
2018-03-01 01:00:00   NaN          NaN
2018-03-01 01:15:00   NaN          NaN
2018-03-01 01:30:00   NaN          NaN
2018-03-01 01:45:00  39.0  1033.461538
2018-03-01 02:00:00  39.0  1081.066667
2018-03-01 02:15:00  39.0  1067.909091
2018-03-01 02:30:00  39.0  1026.600000
2018-03-01 02:45:00  39.0  1051.866667

要填写id,您可以使用fillna(method='ffill')

resampled_df = df.resample('15T', on='time').mean()

resampled_df['id'].fillna(method='ffill', inplace=True)

resampled_df

                       id            w
time                                  
2018-03-01 00:00:00  39.0  1176.000000
2018-03-01 00:15:00  39.0          NaN
2018-03-01 00:30:00  39.0          NaN
2018-03-01 00:45:00  39.0          NaN
2018-03-01 01:00:00  39.0          NaN
2018-03-01 01:15:00  39.0          NaN
2018-03-01 01:30:00  39.0          NaN
2018-03-01 01:45:00  39.0  1033.461538
2018-03-01 02:00:00  39.0  1081.066667
2018-03-01 02:15:00  39.0  1067.909091
2018-03-01 02:30:00  39.0  1026.600000
2018-03-01 02:45:00  39.0  1051.866667