我创建了以下 Pandas 数据框并尝试计算 Col2 中给出的年份之间的增长百分比:
Col1 | Col2 | 一月 | 二月 | 先生 | 总计 |
---|---|---|---|---|---|
A | 2019 | 100 | 200 | 300 | 600 |
A | 2020 | 200 | 300 | 400 | 900 |
B | 2019 | 10 | 20 | 30 | 60 |
B | 2020 | 20 | 30 | 40 | 90 |
C | 2019 | 1000 | 2000 | 3000 | 6000 |
C | 2020 | 2000 | 3000 | 4000 | 9000 |
包含结果的表格应如下所示(见最后 3 行):
Col1 | Col2 | 一月 | 二月 | 先生 | 总计 |
---|---|---|---|---|---|
A | 2019 | 100 | 200 | 300 | 600 |
A | 2020 | 200 | 300 | 400 | 900 |
B | 2019 | 10 | 20 | 30 | 60 |
B | 2020 | 20 | 30 | 40 | 90 |
C | 2019 | 1000 | 2000 | 3000 | 6000 |
C | 2020 | 2000 | 3000 | 4000 | 9000 |
A | GrowthInPercent | 100 | 50 | 33 | 50 |
B | GrowthInPercent | 100 | 50 | 33 | 50 |
C | GrowthInPercent | 100 | 50 | 33 | 50 |
有没有办法使用 pandas 函数计算 GrowthInPercent 值?
我不明白;-(
答案 0 :(得分:2)
您可以将 pct_change
与 groupby
一起使用
u = (df[['Col1']].join(df.drop("Col2",1).groupby('Col1').pct_change()
.mul(100).round())
.dropna().assign(Col2="Growth%"))
out = df.append(u,ignore_index=True)
print(out)
Col1 Col2 Feb Jan Mrz Total
0 A 2019 200.0 100.0 300.0 600.0
1 A 2020 300.0 200.0 400.0 900.0
2 B 2019 20.0 10.0 30.0 60.0
3 B 2020 30.0 20.0 40.0 90.0
4 C 2019 2000.0 1000.0 3000.0 6000.0
5 C 2020 3000.0 2000.0 4000.0 9000.0
6 A Growth% 50.0 100.0 33.0 50.0
7 B Growth% 50.0 100.0 33.0 50.0
8 C Growth% 50.0 100.0 33.0 50.0
注意 - 这是假设数据按 Col1
和 Col2
排序,如果不是,您可以先使用 df = df.sort_values(by=['Col1','Col2'])
对数据进行排序.