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

如何关联两个不同DataFrame完成计算?附分组统计实操场景

解决多DataFrame关联统计问题:以主管-渠道销售额计算为例

我来帮你搞定这个问题!先从你给的具体例子入手,再聊聊多DataFrame关联计算的通用思路~

第一步:处理具体业务场景

你给出的两个DataFrame里,df1是主管和销售人员的对应关系,df2是各销售人员分渠道、分月的销售额。要计算各主管按渠道的销售额,核心是把两个表通过「销售人员」关联起来,再分组聚合。

完整代码实现(用Pandas)

首先先还原你的两个DataFrame:

import pandas as pd

# 构造df1:主管-销售对应表
df1 = pd.DataFrame({
    'supervisor': ['Supervisor1', 'Supervisor2', 'Supervisor2'],
    'salesperson': ['Matt', 'Amelia', 'Philip']
})

# 构造df2:销售业绩表(宽格式)
df2 = pd.DataFrame({
    'month': ['Jan', 'Jan', 'Feb', 'Feb'],
    'channel': ['Internet', 'Cellphone', 'Internet', 'Cellphone'],
    'Matt': [10, 20, 40, 30],
    'Amelia': [50, 60, 40, 120],
    'Philip': [20, 30, 30, 40]
})

然后按以下步骤操作:

  1. 把宽格式的df2转成长格式:因为df2的列是销售人员名字,无法直接和df1关联,用melt转成每行对应一个销售人员的业绩:
df2_long = df2.melt(
    id_vars=['month', 'channel'],  # 保留不变的列
    var_name='salesperson',        # 原列名转为「销售人员」列
    value_name='sales'             # 原单元格值转为「销售额」列
)
  1. 关联两个DataFrame:通过salesperson字段,把df1的主管信息合并到业绩表中:
merged_df = pd.merge(df2_long, df1, on='salesperson', how='left')

这里用how='left'是为了保留所有业绩数据,避免因为匹配不到主管而丢失数据(如果你的业务要求只保留有主管的销售,换成how='inner'即可)。

  1. 按渠道+主管分组计算总销售额:
final_result = merged_df.groupby(['channel', 'supervisor'])['sales'].sum().reset_index()

最终结果会是这样:

channelsupervisorsales
CellphoneSupervisor150
CellphoneSupervisor2210
InternetSupervisor150
InternetSupervisor2110

多DataFrame关联计算的通用方法论

当你需要关联2个及以上DataFrame做统计时,遵循这几个准则能让你高效且不出错:

  • 先统一关联键的格式:确保关联字段(比如这里的salesperson)在所有表中格式一致——比如大小写统一、无空值、没有多余空格。如果有格式问题,合并后会出现大量NaN,影响结果。
  • 优先把宽格式转成长格式:像df2这种以实体(销售人员)作为列的宽表,转成长表后更方便关联、分组和后续分析,这是处理这类数据的常用技巧。
  • 选择合适的合并方式:
    • inner:只保留所有表都匹配到的记录(适合需要严格匹配的场景)
    • left/right:保留左表/右表的所有记录,匹配不上的用NaN填充(适合不想丢失某一方数据的场景)
    • outer:保留所有表的记录,匹配不上的用NaN填充(适合需要全量数据的场景)
  • 分步验证每一步的结果:合并后先检查有没有异常的NaN,分组前确认合并的数据是否符合预期,避免一步错步步错。
  • 精简数据再操作:如果DataFrame很大,先过滤掉不需要的列或行(比如不需要的月份、无关的字段),再进行合并和分组,能节省内存,提升运算速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:00:28