创建显示上一期间百分比 +/- 的列
Create column that shows percentage +/- from previous period
我有这个数据框,我想创建一个列来显示从期间到当前期间的金额变化百分比,同时按 Company_Id、国家/地区和期间分组。
Company_Id Country Period Amount
MOO17 USA Previous Period 500
KQR20 UK Previous Period 1000
KQR20 UK Current Period 20000
ABY88 Ireland Previous Period 1000
ABY88 Ireland Current Period 250
SOQ99 Japan Previous Period 8000
SOQ99 Japan Current Period 25000
RTU89 China Current Period 20000
RTU89 China Previous Period 1000
WER67 Canada Current Period 5000
WER67 Canada Previous Period 20000
我试过以下方法:
df['desired']= df['Amount'] / df.groupby(['Company_Id','Country','Period])['Amount'].shift(1)
df= df.sort_values(by=['Company_Id','Country','Period],ascending=[True, True, False],inplace=True)
df['desired'] = df.groupby(['Company_Id','Country','Period])['Amount].pct_change()
我不断收到与我需要的分组不一致的 nans 或值。
期望的输出:
Company_Id Country Period Amount Desired
MOO17 USA Previous Period 500 na
KQR20 UK Previous Period 1000 na
KQR20 UK Current Period 20000 1900%
ABY88 Ireland Previous Period 1000 na
ABY88 Ireland Current Period 250 -75%
SOQ99 Japan Previous Period 8000 na
SOQ99 Japan Current Period 25000 212.5%
RTU89 China Current Period 20000 na
RTU89 China Previous Period 1000 -95%
WER67 Canada Current Period 5000 na
WER67 Canada Previous Period 20000 300%
df2['desired'] = df2.groupby(['Company_Id','Country'])['Amount'].pct_change()*100
如果要添加百分号,可以按如下操作。但是,它会将列的数据类型从 float64
更改为 object
df2['desired'] = (df2.groupby(['Company_Id','Country'])['Amount'].pct_change()*100).astype(str) + '%'
我有这个数据框,我想创建一个列来显示从期间到当前期间的金额变化百分比,同时按 Company_Id、国家/地区和期间分组。
Company_Id Country Period Amount
MOO17 USA Previous Period 500
KQR20 UK Previous Period 1000
KQR20 UK Current Period 20000
ABY88 Ireland Previous Period 1000
ABY88 Ireland Current Period 250
SOQ99 Japan Previous Period 8000
SOQ99 Japan Current Period 25000
RTU89 China Current Period 20000
RTU89 China Previous Period 1000
WER67 Canada Current Period 5000
WER67 Canada Previous Period 20000
我试过以下方法:
df['desired']= df['Amount'] / df.groupby(['Company_Id','Country','Period])['Amount'].shift(1)
df= df.sort_values(by=['Company_Id','Country','Period],ascending=[True, True, False],inplace=True)
df['desired'] = df.groupby(['Company_Id','Country','Period])['Amount].pct_change()
我不断收到与我需要的分组不一致的 nans 或值。
期望的输出:
Company_Id Country Period Amount Desired
MOO17 USA Previous Period 500 na
KQR20 UK Previous Period 1000 na
KQR20 UK Current Period 20000 1900%
ABY88 Ireland Previous Period 1000 na
ABY88 Ireland Current Period 250 -75%
SOQ99 Japan Previous Period 8000 na
SOQ99 Japan Current Period 25000 212.5%
RTU89 China Current Period 20000 na
RTU89 China Previous Period 1000 -95%
WER67 Canada Current Period 5000 na
WER67 Canada Previous Period 20000 300%
df2['desired'] = df2.groupby(['Company_Id','Country'])['Amount'].pct_change()*100
如果要添加百分号,可以按如下操作。但是,它会将列的数据类型从 float64
object
df2['desired'] = (df2.groupby(['Company_Id','Country'])['Amount'].pct_change()*100).astype(str) + '%'