1 回答
TA贡献1796条经验 获得超4个赞
据我所知,您可以堆叠
2列S1和S2,并检查同一索引中的任何值是A还是B,然后使用np.where
,其中条件匹配,分配0 else分配pct_change
与您在列A1和A2上显示的计算相同level=0
cond = df[['S1','S2']].stack().isin(['A','B']).any(level=0)
arr = np.where(cond[:,None], np.zeros(len(df))[:,None],
df[['A1','A2']].pct_change().mul(100).round(2))
df[['D1%','D2%']] = pd.DataFrame(arr)
print(df)
P T W A1 A2 S1 S2 D1% D2%
0 10 1 1 10 20 A B 0.00 0.00
1 10 1 2 11 25 C C 10.00 25.00
2 10 1 3 10 15 D D -9.09 -40.00
3 10 1 4 9 10 C C -10.00 -33.33
4 10 1 5 8 5 C C -11.11 -50.00
5 10 2 1 20 40 B A 0.00 0.00
6 10 2 2 10 10 C C -50.00 -75.00
7 10 2 3 15 30 C C 50.00 200.00
8 10 2 4 5 20 D D -66.67 -33.33
9 10 2 5 25 10 C C 400.00 -50.00
添加回答
举报