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

如何合并pandas DataFrame并按id+日期计算正确加权平均值

Pandas双表按id+date合并计算加权平均实现方案

实现思路

  • 对两个DataFrame执行外连接,匹配键为id和date,保证两端所有的组合都被保留
  • 对匹配不到产生的缺失值填充为0,避免后续计算报错
  • 按照给定公式计算总count和加权平均值
  • 最终筛选需要的字段,按id和date排序后输出

完整实现代码

import pandas as pd

# 构造示例DF A
df_a = pd.DataFrame({
    'id': [1, 1],
    'date': ['27/06/2021', '28/06/2021'],
    'avg': [10, 12],
    'count': [5, 4]
})

# 构造示例DF B
df_b = pd.DataFrame({
    'id': [1, 1, 1, 2, 2],
    'date': ['27/06/2021', '28/06/2021', '29/06/2021', '27/06/2021', '28/06/2021'],
    'avg': [8, 6, 11, 3, 3],
    'count': [5, 6, 10, 10, 10]
})

# 外连接合并两个表,区分来源字段后缀
merged_df = df_a.merge(df_b, on=['id', 'date'], how='outer', suffixes=('_a', '_b'))

# 缺失值填充为0
merged_df = merged_df.fillna(0)

# 计算最终的count和加权avg
merged_df['count'] = merged_df['count_a'] + merged_df['count_b']
merged_df['avg'] = (merged_df['avg_a'] * merged_df['count_a'] + merged_df['avg_b'] * merged_df['count_b']) / merged_df['count']

# 提取结果字段并排序
result = merged_df[['id', 'date', 'avg', 'count']].sort_values(by=['id', 'date']).reset_index(drop=True)

# 打印验证结果
print(result)

结果说明

运行上述代码后得到的result和你给出的预期结果完全一致,如果需要保留指定小数位数,可以对avg字段使用round方法做精度处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 10:36:08