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

如何调整pandas聚合逻辑使Difference列每个唯一值仅单独展示一次

问题原因

你编写的聚合逻辑中,Difference(%)列对应的lambda函数接收的参数x是当前分组下所有Value值组成的Series对象,直接对x做算术运算会返回和分组元素数量相同的结果序列,最终就会在对应行展示多值列表,不符合单值需求。

解决方案

因为同一个分组下的Value值完全一致,只需要在lambda函数中取分组的任意一个Value值参与运算即可,最简单的方式是取分组第一个元素x.iloc[0]。

修改后的完整代码如下:

import pandas as pd 
import numpy as np

a = np.array([12,12,12,9,43,43,43,22,8,9,9,43])
df = pd.DataFrame({'Value': a})

res = (df.groupby('Value', as_index=False)
   .agg(**{'Repetition Count': ('Value', 'size'), 
           'Percent(%)': ('Value', lambda x: round(x.size/len(a) *100, 2)),
           'Difference(%)': ('Value', lambda x: round((x.iloc[0]-10)/10 *100, 2))})
)

运行后输出的Difference(%)列就和预期效果一致:

0    -20.0
1    -10.0
2     20.0
3    120.0
4    330.0
Name: Difference(%), dtype: float64

可选优化方案

你也可以把Difference(%)的计算放到分组聚合之后执行,代码可读性和运行效率更高:

res = df.groupby('Value', as_index=False).agg(
    重复次数=('Value', 'size'),
    占比=('Value', lambda x: round(x.size/len(a)*100, 2))
)
res['Difference(%)'] = round((res['Value']-10)/10 *100, 2)

内容的提问来源于stack exchange,提问作者georgehere

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:27:03