我将时间序列与间隔分组。我不想填补空白,尊重分组。
date
在每个id
中都是唯一的。
以下方法有效,但是给了我零,而我不需要NaN。
data.groupby('id').resample('D', on='date').sum()\
.drop('id', axis=1).reset_index()
以下出于某些原因不起作用
data.groupby('id').resample('D', on='date').asfreq()\
.drop('id', axis=1).reset_index()
data.groupby('id').resample('D', on='date').fillna('pad')\
.drop('id', axis=1).reset_index()
我收到以下错误:
Upsampling from level= or on= selection is not supported, use .set_index(...) to explicitly set index to datetime-like
我尝试将pandas.Grouper
与set_index
一起使用多级索引或单级索引,但是它似乎并未对我的日期列进行升采样,因此我得到了连续的日期,或者它不尊重{{1} }列。
Pandas版本为0.23
尝试一下:
id
答案 0 :(得分:1)
创建DatetimeIndex
并从on
中删除参数resample
:
print (data.set_index('date').groupby('id').resample('D').asfreq())
id
id date
1 2018-01-01 1.0
2018-01-02 NaN
2018-01-03 NaN
2018-01-04 NaN
2018-01-05 1.0
2018-01-06 NaN
2018-01-07 NaN
2018-01-08 NaN
2018-01-09 NaN
2018-01-10 1.0
2 2018-01-01 2.0
2018-01-02 NaN
2018-01-03 NaN
2018-01-04 NaN
2018-01-05 2.0
2018-01-06 NaN
2018-01-07 NaN
2018-01-08 NaN
2018-01-09 NaN
2018-01-10 2.0
print (data.set_index('date').groupby('id').resample('D').fillna('pad'))
#alternatives
#print (data.set_index('date').groupby('id').resample('D').ffill())
#print (data.set_index('date').groupby('id').resample('D').pad())
id
id date
1 2018-01-01 1
2018-01-02 1
2018-01-03 1
2018-01-04 1
2018-01-05 1
2018-01-06 1
2018-01-07 1
2018-01-08 1
2018-01-09 1
2018-01-10 1
2 2018-01-01 2
2018-01-02 2
2018-01-03 2
2018-01-04 2
2018-01-05 2
2018-01-06 2
2018-01-07 2
2018-01-08 2
2018-01-09 2
2018-01-10 2
编辑:
如果要使用缺少值的sum
,则需要min_count=1
参数-sum
:
最小计数:整数,默认为0 执行操作所需的有效值数量。如果存在少于min_count个非NA值,则结果将为NA。
0.22.0版中的新增功能:添加了默认值0。这表示全NA或空系列的总和为0,全NA或空系列的乘积为1。
print (data.groupby('id').resample('D', on='date').sum(min_count=1))