熊猫:使用Multiindex进行复杂的重采样和分组

时间:2013-05-27 09:43:34

标签: python pandas smoothing resampling

我有以下DataFrame:

df = pd.DataFrame({
'Trader': 'Carl Mark Carl Joe Joe Carl Joe Carl'.split(),
'Product': list('AAAABBAA'),
'Quantity': [5,2,5,10,1,5,2,3],
'Start' : [
    DT.datetime(2013,1,1,9,0),
    DT.datetime(2013,1,1,8,5),
    DT.datetime(2013,2,5,14,0),
    DT.datetime(2013,2,5,16,0),
    DT.datetime(2013,2,8,20,0),                                      
    DT.datetime(2013,2,8,16,50),
    DT.datetime(2013,2,8,7,0),
    DT.datetime(2013,7,4,8,0)]})

df = df.set_index(['Start', 'Trader', 'Product'])

我想每天重新采样此DataFrame并计算以下复杂统计信息。

  • 对于每种产品:EMA价值(前一天)和交易商累计购买之间的每周平均差异是什么

  • 对于每种产品:交易者购买日期的每周平均差异是什么

作为第一步,我正在取消产品和交易者列并使用以下方式计算电子邮件:

df1 = df.unstack(level=[1,2]).fillna(0).resample('D', 'mean').fillna(0)
df2 = pd.ewma(df1, span=7)

更新

感谢Wouter Overmeire的评论,我可以使用以下方法将移位的趋势值与原始值相结合:

df2 = df2.shift(freq='D')
df3 = pd.concat([df1, df2], keys=['acctual', 'trend'], axis=1)
df4 = df3.stack(['Trader', 'Product']).fillna(0)

基于此DateFrame,我尝试使用按功能分组回答上述两个问题。不幸的是,我无法从交易者列中抽象出来,因为它仍然是按功能分组的结果。有人有想法吗?

df4 = df4.reset_index()
def f (df):
    df['Diff'] = abs(df[('acctual', 'Quantity')] - df[('trend', 'Quantity')])
    return df


df5 = df4.groupby([df4['Start'].map(lambda x: x.year), df4['Start'].map(lambda x: x.week),    df4['Product']])
df5.apply(f)

我会非常感谢任何帮助。

由于

安迪

0 个答案:

没有答案