You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 16:57:10