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

如何基于多个DataFrame按多条件实现金额求和

解决方案

问题说明

我有一个用于提取筛选条件的DataFrame:

id条件1条件2
13/1/2022Black
25/2/2022Black
33/1/2022Blue

需要用这些条件,对以下DataFrame的金额进行求和:

id日期颜色Amount
13/1/2022Black15
25/2/2022Red10
33/1/2022Blue25
45/2/2022Red10
54/1/2022Black15
63/1/2022Black45

期望得到结果:

id条件1条件2Amount
13/1/2022Black60
25/2/2022Black0
33/1/2022Blue25

实现代码

使用Pandas可以快速实现需求,代码如下:

import pandas as pd

# 构建条件DataFrame
df_conditions = pd.DataFrame({
    'id': [1, 2, 3],
    '条件1': ['3/1/2022', '5/2/2022', '3/1/2022'],
    '条件2': ['Black', 'Black', 'Blue']
})

# 构建数据DataFrame
df_data = pd.DataFrame({
    'id': [1, 2, 3, 4, 5, 6],
    '日期': ['3/1/2022', '5/2/2022', '3/1/2022', '5/2/2022', '4/1/2022', '3/1/2022'],
    '颜色': ['Black', 'Red', 'Blue', 'Red', 'Black', 'Black'],
    'Amount': [15, 10, 25, 10, 15, 45]
})

# 按日期+颜色分组,计算金额总和
sum_amount = df_data.groupby(['日期', '颜色'])['Amount'].sum().reset_index()

# 左连接条件表与求和结果,保留所有条件行
result = df_conditions.merge(
    sum_amount,
    left_on=['条件1', '条件2'],
    right_on=['日期', '颜色'],
    how='left'
)

# 填充无匹配的金额为0,整理输出列
result['Amount'] = result['Amount'].fillna(0).astype(int)
result = result[['id', '条件1', '条件2', 'Amount']]

print(result)

代码解释

  1. 分组求和:先对数据DataFrame按日期和颜色分组,计算每组的金额总和,得到每个条件组合的总金额。
  2. 左连接:用左连接关联条件表和求和结果,确保条件表的所有行都被保留,无匹配的组合会生成NaN值。
  3. 空值处理:将NaN值替换为0,满足无匹配时金额为0的要求,最后调整列顺序得到目标结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:57:22