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

基于相同Name与Date匹配的两个pandas DataFrame数值相减实现

解决方案

实现逻辑如下:

  • 先对第一个DataFrame按Name和date两个字段分组,对同组的price字段求和
  • 将汇总结果和第二个DataFrame按Name、date字段匹配,计算第二个DataFrame的price减去汇总后的price得到差值
  • 将匹配后得到的差值行追加到原始第一个DataFrame中,即可得到预期结果

示例代码如下:

import pandas as pd

# 构造示例df1、df2,实际使用时替换为你自己的数据源即可
df1 = pd.DataFrame({
    'Name': ['Apple','Orange','Banana','Gauva','Grapes','Sapota','Papaya',
             'Apple','Orange','Banana','Gauva','Grapes','Apple','Orange',
             'Banana','Gauva','Grapes'],
    'price': [25,35,15,10,5,15,33,20,30,10,10,5,15,25,25,20,15],
    'date': ['23-9-2021']*5 + ['22-9-2021','21-9-2021'] + ['23-9-2021']*10
})
df2 = pd.DataFrame({
    'Name': ['Apple','Orange','Banana','Gauva','Grapes'],
    'price': [80,100,90,60,45],
    'date': ['23-9-2021']*5
})

# 第一步:df1按Name、date分组求和
df1_sum = df1.groupby(['Name','date'], as_index=False)['price'].sum()

# 第二步:和df2合并计算差值
merged = pd.merge(df1_sum, df2, on=['Name','date'], suffixes=('_sum','_df2'))
merged['price'] = merged['price_df2'] - merged['price_sum']
# 只保留需要的列,准备追加
diff_rows = merged[['Name','price','date']]

# 第三步:追加到df1
df1 = pd.concat([df1, diff_rows], ignore_index=True)

# 输出结果
print(df1)

以上代码支持任意数量的水果名称,不需要手动指定枚举值,直接运行即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:36:03