[英]Pandas upsampling using groupby and resample
我將時間序列與缺口分組。 我不想填補空白,尊重團體。
每個id
date
都是唯一的。
以下工作有效,但給了我零,而我不想使用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
多級索引或單索引一起使用,但是它似乎並未對我的日期列進行升采樣,因此我得到連續的日期,或者它不尊重id
列。
熊貓是0.23版
自己嘗試:
data = pd.DataFrame({
'id': [1,1,1,2,2,2],
'date': [
datetime(2018, 1, 1),
datetime(2018, 1, 5),
datetime(2018, 1, 10),
datetime(2018, 1, 1),
datetime(2018, 1, 5),
datetime(2018, 1, 10)],
'value': [100, 110, 90, 50, 40, 60]})
# Works but gives zeros
data.groupby('id').resample('D', on='date').sum()
# Fails
data.groupby('id').resample('D', on='date').asfreq()
data.groupby('id').resample('D', on='date').fillna('pad')
創建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
:
min_count :int,默認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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.