如何使用Pandas计算匹配B列值的X、Y行count列百分比变化?
用Pandas高效计算分组内的百分比变化
首先构造示例DataFrame:
import pandas as pd df = pd.DataFrame({ 'A': ['X', 'Y', 'X', 'Y', 'X', 'Y'], 'B': ['A1', 'A1', 'A2', 'A2', 'A3', 'A4'], 'count': [10, 5, 1, 50, 2, 90] })
步骤1:转换为宽格式
通过pivot方法将数据按B分组,把A的取值(X/Y)转为列,方便直接对比:
df_pivot = df.pivot(index='B', columns='A', values='count')
转换后结果:
A X Y B A1 10.0 5.0 A2 1.0 50.0 A3 2.0 NaN A4 NaN 90.0
步骤2:计算百分比变化
按照需求公式100*(Y - X)/X计算,同时对仅存在单一值的情况做特殊标记:
df_pivot['pct_change'] = df_pivot.apply( lambda row: 100*(row['Y'] - row['X'])/row['X'] if pd.notna(row['X']) and pd.notna(row['Y']) else '仅单一值', axis=1 )
步骤3:合并回原DataFrame(可选)
如果需要把计算结果关联到原始数据的每一行,用merge操作:
result = df.merge(df_pivot[['pct_change']], on='B', how='left')
最终结果:
A B count pct_change 0 X A1 10 -50.0 1 Y A1 5 -50.0 2 X A2 1 4900.0 3 Y A2 50 4900.0 4 X A3 2 仅单一值 5 Y A4 90 仅单一值
为什么不用pct_change?
pct_change默认按序列顺序计算相邻值的变化,但这里需要明确以X为基准、Y为对比值的定向变化,自定义计算逻辑更精准直接。
内容的提问来源于stack exchange,提问作者teg95
相关产品推荐
相关产品推荐

