You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于Pandas合并两个DataFrame计算产品剩余余额

最优实现方法:聚合支付数据 + 左连接 + 计算列

嘿,针对你的需求,我推荐一套高效且清晰的实现流程,核心思路是先聚合有效支付金额,再和产品表关联,最后计算剩余余额。这样既保证性能,又让逻辑一目了然。

步骤拆解与代码示例

假设你的两个DataFrame分别是:

  • df_products:存储产品的KEYoriginal_price
  • df_payments:记录每笔支付的KEYprice_codepayment_price

1. 筛选并聚合有效支付金额

首先从支付表中筛选出price_code为13、14、15的记录,然后按KEY分组求和,得到每个产品的总有效支付金额:

# 筛选有效支付记录并聚合
valid_payments = df_payments[df_payments['price_code'].isin([13, 14, 15])]
total_payments = valid_payments.groupby('KEY')['payment_price'].sum().reset_index(name='total_valid_payments')

2. 合并产品表与聚合后的支付数据

使用左连接将聚合结果合并到产品表中,这样即使某个产品没有有效支付记录,也能保留其原始数据,缺失的支付金额用0填充:

# 左连接,保留所有产品记录
merged_df = df_products.merge(total_payments, on='KEY', how='left').fillna({'total_valid_payments': 0})

3. 计算剩余余额列

最后新增remaining_balance列,用原始价格减去总有效支付金额:

# 计算剩余余额
merged_df['remaining_balance'] = merged_df['original_price'] - merged_df['total_valid_payments']

为什么这是最优解?

  • 性能高效:先筛选再聚合,减少了groupby的计算量;merge操作是Pandas的高效内置方法,比逐行遍历快得多。
  • 逻辑清晰:每一步都有明确的职责,从筛选有效数据到聚合、合并、计算,流程一目了然,方便后续维护。
  • 鲁棒性强:左连接+填充0的处理,确保了没有支付记录的产品也能正确计算余额(即余额等于原始价格)。

如果你想简化代码,也可以把步骤合并成链式调用:

df_products['remaining_balance'] = df_products['original_price'] - df_products['KEY'].map(
    df_payments[df_payments['price_code'].isin([13,14,15])]
    .groupby('KEY')['payment_price']
    .sum()
    .fillna(0)
)

这种写法更简洁,但可读性稍弱,适合熟悉Pandas链式操作的场景。

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

火山引擎 最新活动