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

如何在Pandas DataFrame无分组场景下对多列求和,同时保持数据类型及DataFrame输出格式

如何在Pandas DataFrame无分组场景下对多列求和,同时保持数据类型及DataFrame输出格式

嘿,完全懂你的痛点!分组求和的时候能得到格式规整的DataFrame,还能保留各列原本的数据类型,但直接调用sum()就变成Series,不仅格式不对,连整数列都被转成浮点数了——加dummy列虽然能解决,但确实有点啰嗦。给你几个更优雅的方案:

方案一:匿名函数分组(最推荐,完美匹配分组求和逻辑)

直接用groupby把所有行归为同一组,这样求和的逻辑和你分组ind1时完全一致,既能输出一行的DataFrame,又能严格保留各列的数据类型:

result = df[['x', 'y']].groupby(lambda _: True).sum().reset_index(drop=True)

运行后得到的结果完全符合你的预期:

x     y
0  10  10.6

这里的lambda _: True会把每一行都分到同一个组里,求和时会像分组场景那样逐列单独计算,所以x列还是整数类型,y列保持浮点数,和分组求和的行为完全对齐。

方案二:利用sum的keepdims参数(最简洁,适合不介意类型转换的场景)

Pandas的sum方法自带一个keepdims参数,设置为True就能保留原DataFrame的二维结构,直接返回一行的DataFrame:

result = df[['x', 'y']].sum(keepdims=True)

不过要注意,这个方法会把所有列的类型统一提升为更通用的类型(比如你的x列会从int变成float),因为它是对整个DataFrame求和后直接保留维度,没有逐列维护类型。如果你的场景不介意这点,这个方法是最简洁的。

方案三:手动构造DataFrame(最灵活,可自定义类型)

如果你想完全掌控每一列的类型,可以先按列单独求和,再手动组装成DataFrame:

sum_vals = {col: df[col].sum() for col in ['x', 'y']}
result = pd.DataFrame([sum_vals])

要是需要强制指定类型(比如确保x列是整数),还能手动调整:

sum_vals = {
    'x': int(df['x'].sum()),
    'y': df['y'].sum()
}
result = pd.DataFrame([sum_vals])

这些方案都不需要修改原DataFrame,代码更简洁易读,也更容易给其他同事解释~

备注:内容来源于stack exchange,提问作者Keyub W

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 09:39:35