如何在Pandas的pivot_table函数中将aggfunc求和结果除以2?
解决Pandas透视表聚合结果除以2的问题
首先注意原代码的关键问题:points_for列存储的是字符串类型,直接用sum聚合会得到字符串拼接结果,而非数值求和。必须先将该列转换为数值类型,再进行后续处理。
方法一:透视表聚合后直接除以2
先转换数据类型,生成透视表后对结果整体做除法运算:
import pandas as pd # 创建DataFrame并转换points_for为整数类型 df = pd.DataFrame({'team': ['A', 'B','B', 'B','A', 'A','A', 'B',], 'points_for': ['18', '22', '19', '14', '14', '11', '20', '28'], 'points_against': ['aa','bb','aa','bb','aa','bb','aa','bb']}) df['points_for'] = df['points_for'].astype(int) # 生成透视表并将求和结果除以2 df2 = pd.pivot_table(df, values='points_for', index='team', columns='points_against', aggfunc='sum') / 2 print(df2)
方法二:自定义聚合函数
直接在aggfunc中定义求和后除以2的逻辑:
import pandas as pd df = pd.DataFrame({'team': ['A', 'B','B', 'B','A', 'A','A', 'B',], 'points_for': ['18', '22', '19', '14', '14', '11', '20', '28'], 'points_against': ['aa','bb','aa','bb','aa','bb','aa','bb']}) df['points_for'] = df['points_for'].astype(int) # 自定义聚合函数:求和后除以2 def sum_then_divide_by_two(x): return x.sum() / 2 df2 = pd.pivot_table(df, values='points_for', index='team', columns='points_against', aggfunc=sum_then_divide_by_two) print(df2)
两种方法最终都会得到目标结果:将透视表中每个聚合求和值除以2。
内容的提问来源于stack exchange,提问作者Virendra Patel
相关产品推荐
相关产品推荐

