Pandas groupby 多列,pct_change
Pandas groupby multiple columns, with pct_change
我试图找出每个独特组在 Value
中的周期性增长,按(Company
、Group
和 Date
分组).
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()
但是这个 returns 都是 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
您想将日期放入行索引并 groups/company 放入列
d1 = df.set_index(['Date', 'Company', 'Group']).Value.unstack(['Company', 'Group'])
d1
然后使用pct_change
d1.pct_change()
或
与groupby
df['pct'] = df.sort_values('Date').groupby(['Company', 'Group']).Value.pct_change()
df
我不确定 groupby
方法至少在 Pandas 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
df['Pct_Change'] = df.groupby(['Company','Group'])['Value'].pct_change()
我试图找出每个独特组在 Value
中的周期性增长,按(Company
、Group
和 Date
分组).
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()
但是这个 returns 都是 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
您想将日期放入行索引并 groups/company 放入列
d1 = df.set_index(['Date', 'Company', 'Group']).Value.unstack(['Company', 'Group'])
d1
然后使用pct_change
d1.pct_change()
或
与groupby
df['pct'] = df.sort_values('Date').groupby(['Company', 'Group']).Value.pct_change()
df
我不确定 groupby
方法至少在 Pandas 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
df['Pct_Change'] = df.groupby(['Company','Group'])['Value'].pct_change()