如何合并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
相关产品推荐
相关产品推荐

