移動以前的日期的平均I具有以下DF:新近度加權大熊貓
index = pd.to_datetime(['2017-03-01', '2017-03-01', '2017-02-15', '2017-02-01',
'2017-01-20', '2017-01-20', '2017-01-20', '2017-01-02',
'2016-12-04', '2016-12-04', '2016-12-04', '2016-11-16'])
df = pd.DataFrame(data = {'val': [8, 1, 5, 2, 3 , 5, 9, 14, 13, 2, 1, 12],
'group': ['one', 'two', 'one', 'one', 'two', 'two', 'one', 'two',
'two', 'one', 'one', 'two']},
index=index)
df = df.sort_index()
group val
2016-11-16 two 12
2016-12-04 two 13
2016-12-04 one 2
2016-12-04 one 1
2017-01-02 two 14
2017-01-20 two 3
2017-01-20 two 5
2017-01-20 one 9
2017-02-01 one 2
2017-02-15 one 5
2017-03-01 one 8
2017-03-01 two 1
在每一個組(一個,兩個)我想先前val的一個新近度加權平均。因此,例如在看一組:
group val
2016-12-04 one 2
2016-12-04 one 1
2017-01-20 one 9
2017-02-01 one 2
2017-02-15 one 5
2017-03-01 one 8
例如,對於日期2017-02-15
,我希望計算其近因加權版本(較高的權重爲較近的日期作爲此日期值的新列以前的值是[2,9,1,2])。請注意,可能在一個組內有多次日期,並且應該得到相同的權重。
我認爲大熊貓指數加權函數對此很有用。我認爲這是一組內的日期是相同的,我會首先考慮這些值的意思,以便稍後可以應用簡單的shift()。我試過如下:
df = df.reset_index().set_index(['index', 'group']).groupby(
level=[0,1]).mean().reset_index().set_index('index')
現在,如果我不感興趣的近因加權我喜歡的東西
df = df.groupby('group')['val'].expanding().mean().groupby(level=0).shift()
,然後用原來的日期和集團合併。 但是,當我試圖用pandas.ewma我失去了一些東西像:
df.groupby('group')['val'].ewm(span=27).groupby(level=0).shift()
我可以通過組迭代:
grouped = df.groupby('group')['val']
for key, group in grouped:
print pd.ewma(group, span=27).shift()
index
2016-12-04 NaN
2017-01-20 1.500000
2017-02-01 5.388889
2017-02-15 4.174589
2017-03-01 4.404414
Name: val, dtype: float64
index
2016-11-16 NaN
2016-12-04 12.000000
2017-01-02 12.518519
2017-01-20 13.049360
2017-03-01 10.529680
,然後組和日期莫名其妙合併與原df
但這似乎過於複雜。有一個更好的方法嗎?
真的嗎?幫助你?嘆。 –