use*_*979 6 python numpy pandas
我试图找到每个唯一组的价值增长期,按公司,集团和日期分组.
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
Run Code Online (Sandbox Code Playgroud)
我试过了:
df.groupby(['Date','Company','Group']).pct_change()
Run Code Online (Sandbox Code Playgroud)
但这会返回所有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
Run Code Online (Sandbox Code Playgroud)
您希望将日期输入行索引,将组/公司添加到列中
d1 = df.set_index(['Date', 'Company', 'Group']).Value.unstack(['Company', 'Group'])
d1
Run Code Online (Sandbox Code Playgroud)
然后用 pct_change
d1.pct_change()
Run Code Online (Sandbox Code Playgroud)
要么
与groupby
df['pct'] = df.sort_values('Date').groupby(['Company', 'Group']).Value.pct_change()
df
Run Code Online (Sandbox Code Playgroud)
我不确定该groupby方法至少在 Pandas 0.23.4 中是否能按预期工作。
df['pct'] = df.sort_values('Date').groupby(['Company', 'Group']).Value.pct_change()
Run Code Online (Sandbox Code Playgroud)
产生这个,这对于问题的目的来说是不正确的:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4780 次 |
| 最近记录: |