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

基于公共列对Pandas DataFrame多列值求和的实现方法

按公共列分组求和生成新DataFrame的解决方案

没问题,这事儿用Pandas的分组聚合功能就能轻松搞定,我拿你提供的样例数据一步步演示:

原始样例数据

先把你给出的DataFrame整理成表格形式方便查看:

dateiddevicet1t2texty1y2
2010-1-11pcyes1I am1This is a test153
2010-1-11smartyes1I am1This is a test164
2010-1-11tableyes1I am1This is a test175
2010-1-12pcyes2I am1This is a test282
2010-1-12smartyes2I am1This is a test283
2010-1-12tableyes2I am1This is a test294
2010-1-13pcyes3I am3This is a test3103
2010-1-13smartyes3I am3This is a tes3112

实现代码

核心思路是用groupby()指定分组的公共列(date和id),然后选择需要求和的列(y1、y2),最后调用sum()完成聚合,再用reset_index()把分组列还原成普通列:

import pandas as pd

# 假设你的原始DataFrame名为df
df = pd.DataFrame({
    'date': ['2010-1-1']*8,
    'id': [1,1,1,2,2,2,3,3],
    'device': ['pc','smart','table','pc','smart','table','pc','smart'],
    't1': ['yes1','yes1','yes1','yes2','yes2','yes2','yes3','yes3'],
    't2': ['I am1']*6 + ['I am3']*2,
    'text': ['This is a test1']*3 + ['This is a test2']*3 + ['This is a test3', 'This is a tes3'],
    'y1': [5,6,7,8,8,9,10,11],
    'y2': [3,4,5,2,3,4,3,2]
})

# 分组求和
result_df = df.groupby(['date', 'id'])[['y1', 'y2']].sum().reset_index()

输出结果

运行上面的代码后,得到的新DataFrameresult_df如下:

dateidy1y2
2010-1-111812
2010-1-12259
2010-1-13215

补充说明

  • 如果不需要保留分组列作为索引,reset_index()是必须的,否则date和id会变成多级索引
  • 如果你还需要保留其他非聚合列(比如t1、t2),可以用agg()方法指定不同列的聚合规则,比如对t1取第一个值,对y1、y2求和:
    result_df = df.groupby(['date', 'id']).agg(
        t1=('t1', 'first'),
        t2=('t2', 'first'),
        y1=('y1', 'sum'),
        y2=('y2', 'sum')
    ).reset_index()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:11:57