我有一个这样的框架:
df = pd.DataFrame([
['A', 2],
['B', 4],
['C', 20],
['B', 8],
['C', 2],
['A', 2]],
columns=['Label', 'Val1',])
print(df)
Label Val1
0 A 2
1 B 4
2 C 20
3 B 8
4 C 2
5 A 2
字符串
如果我计算Val1
的百分比变化:
df['Val1_change'] = df['Val1'].pct_change(periods=1)
型
我得到了这个:
Label Val1 Val1_change
0 A 2 NaN
1 B 4 1.00
2 C 20 4.00
3 B 8 -0.60
4 C 2 -0.75
5 A 2 0.00
型
每一行都根据它的值相对于前一个值的变化。酷。
然而,我想计算具有相同Label值的行之间的百分比变化,因此具有Label A
的行中的每个值都是根据与具有值A
的前一行的变化来计算的,依此类推。
所以我会得到这个:
Label Val1 Val1_change
0 A 2 NaN
1 B 4 NaN
2 C 20 NaN
3 B 8 1.00 # 100% increase from previous B row
4 C 2 -0.90 # 90 decrease from previous C row
5 A 2 0.00 # no change from previous A row
型
我尝试先将Label设置为索引:
df.set_index('Label', inplace=True)
df['Val1_change'] = df['Val1'].pct_change(periods=1)
型
但计算的pct_change没有变化:
Label
A 2 NaN
B 4 1.00
C 20 4.00
B 8 -0.60
C 2 -0.75
A 2 0.00
型
如何在pandas中实现这一点?
1条答案
按热度按时间shyt4zoc1#
按
Label
分组并在Val1
列上执行.pct_change()
:字符串
打印:
型