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

Python:将子DataFrame按客户求和后合并至主DataFrame

解决DataFrame匹配唯一值并求和填充的通用方案

问题背景

需要将主客户列表DataFrame(df)的WK1列,填充为对应客户在DF_WK1中price列的求和值——即匹配两个DataFrame的Customer列,计算每个客户的price总和后填入主表的WK1列。核心需求是通用方案,要适配每周客户数据列(比如后续的WK2、WK3等)的变化,避免硬编码。

主表df结构:

CustomerWK1
asum
bsum
csum
dsum
esum
fsum
gsum
hsum
isum
jsum

周数据DF_WK1结构:

Customerprice
a22
b37
c2
a44
e29
c64
i22
j37
h2
a44
e29
c64

当前代码的问题

你提供的代码存在几个关键错误:

  • 错误覆盖主表df:将主表替换为仅含唯一客户名的新DataFrame,丢失了原有的WK1列结构
  • groupby参数错误:使用df.CustomerName作为分组键,但原DF_WK1的客户列是Customer,且此时df已被错误替换
  • 未保留主表所有客户:缺少对无交易数据客户(如d、f、g)的处理逻辑

通用解决方案

基础版本(处理单周数据)

先对周数据按客户分组求和,再通过左连接合并到主表,确保主表所有客户都被保留:

import pandas as pd

# 读取主客户列表(保留原有结构,不要覆盖)
df = pd.read_excel("master_customer_list.xlsx")
# 读取周数据
df_wk1 = pd.read_excel("test.xlsx")

# 1. 对周数据按Customer分组求和,重命名列匹配主表的WK1
wk1_sum = df_wk1.groupby("Customer")["price"].sum().reset_index().rename(columns={"price": "WK1"})

# 2. 左连接主表与求和结果,无数据的客户填充0(可根据需求改为NaN)
df = df.merge(wk1_sum, on="Customer", how="left").fillna({"WK1": 0})

print(df)

执行后df的WK1列会被正确填充,比如客户a的总和是22+44+44=110,客户d的WK1值为0。

扩展版本(适配多周数据变化)

如果需要处理WK2、WK3等多周数据,可封装成函数批量处理,完全不用修改核心逻辑:

import pandas as pd

# 读取主客户表
df = pd.read_excel("master_customer_list.xlsx")

# 定义通用处理函数:输入周数据路径、目标列名,返回合并后的主表
def process_week_data(week_file_path, target_col):
    week_df = pd.read_excel(week_file_path)
    # 分组求和并改名
    week_sum = week_df.groupby("Customer")["price"].sum().reset_index().rename(columns={"price": target_col})
    # 左连接合并,无数据填充0
    return df.merge(week_sum, on="Customer", how="left").fillna({target_col: 0})

# 维护周数据文件映射:键是主表要填充的列名,值是对应Excel文件路径
week_data_map = {
    "WK1": "test.xlsx",
    "WK2": "week2_data.xlsx",
    "WK3": "week3_data.xlsx"
}

# 循环处理所有周数据
for col_name, file_path in week_data_map.items():
    df = process_week_data(file_path, col_name)

# 输出最终结果
print(df)

后续新增周数据时,只需要在week_data_map中添加新的键值对即可,完全适配业务变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:45:19