我试图找到每个唯一群组的价值增长期,按公司,组和日期分组。
Company Group Date Value
A X 2015-01 1
A X 2015-02 2
A X 2015-03 1.5
A XX 2015-01 1
A XX 2015-02 1.5
A XX 2015-03 0.75
A XX 2015-04 1
B Y 2015-01 1
B Y 2015-02 1.5
B Y 2015-03 2
B Y 2015-04 3
B YY 2015-01 2
B YY 2015-02 2.5
B YY 2015-03 3
我试过了:
df.groupby(['Date','Company','Group']).pct_change()
但这会返回所有NaN。
我要找的结果是:
Company Group Date Value/People
A X 2015-01 NaN
A X 2015-02 1.0
A X 2015-03 -0.25
A XX 2015-01 NaN
A XX 2015-02 0.5
A XX 2015-03 -0.5
A XX 2015-04 0.33
B Y 2015-01 NaN
B Y 2015-02 0.5
B Y 2015-03 0.33
B Y 2015-04 0.5
B YY 2015-01 NaN
B YY 2015-02 0.25
B YY 2015-03 0.2
答案 0 :(得分:5)
您希望将日期纳入行索引,将组/公司纳入列
d1 = df.set_index(['Date', 'Company', 'Group']).Value.unstack(['Company', 'Group'])
d1
然后使用pct_change
d1.pct_change()
OR
with groupby
df['pct'] = df.sort_values('Date').groupby(['Company', 'Group']).Value.pct_change()
df
答案 1 :(得分:3)
我不确定groupby
方法是否至少按照熊猫0.23.4版本的预期运行。
df['pct'] = df.sort_values('Date').groupby(['Company', 'Group']).Value.pct_change()
产生这个,对于问题的目的是不正确的:
Index + Stack方法仍然可以按预期工作,但是您需要进行其他合并以将其转换为请求的原始格式。
d1 = df.set_index(['Date', 'Company', 'Group']).Value.unstack(['Company', 'Group'])
d1 = d1.pct_change().stack([0,1]).reset_index()
df = df.merge(d1, on=['Company', 'Group', 'Date'], how='left')
df.rename(columns={0: 'pct'}, inplace=True)
df
答案 2 :(得分:1)
df['Pct_Change'] = df.groupby(['Company','Group'])['Value'].pct_change()