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

如何用Pythonic方式计算两个DataFrame共列的行均值?

Pythonic实现两个DataFrame匹配Key行的共同列逐行均值

这问题我熟!完全不用写繁琐的循环,用pandas的向量化操作就能轻松搞定,既简洁又高效。咱们直接上代码和思路:

第一步:构造示例数据

先把你给出的两个DataFrame用代码还原出来:

import pandas as pd

# 构造DF1
df1 = pd.DataFrame({
    'Key': ['K1', 'K2', 'K3', 'K4'],
    'A': [2, 2, 2, 2],
    'B': [3, 3, 3, 3],
    'C': [4, 4, 4, 4],
    'D': [5, 5, 5, 5],
    'E': [8, 8, 8, 8]
})

# 构造DF2
df2 = pd.DataFrame({
    'Key': ['K1', 'K2', 'K3', 'K4'],
    'A': [4, 4, 4, 4],
    'B': [7, 7, 7, 7],
    'C': [4, 4, 4, 4],
    'D': [7, 7, 7, 7]
})

方法一:索引对齐法(最简洁)

这种方法利用pandas的索引对齐特性,一步到位计算均值:

# 将Key设置为索引,方便按Key自动对齐
df1_idx = df1.set_index('Key')
df2_idx = df2.set_index('Key')

# 找出两个DataFrame的共同列(排除Key后的交集)
common_columns = df1_idx.columns.intersection(df2_idx.columns)

# 直接对共同列做向量化运算,计算逐行均值
result_df = (df1_idx[common_columns] + df2_idx[common_columns]) / 2

# 重置索引,把Key变回普通列
result_df = result_df.reset_index()

print(result_df)

运行后输出的结果就是你想要的:

Key  A  B  C  D
0  K1  3  5  4  6
1  K2  3  5  4  6
2  K3  3  5  4  6
3  K4  3  5  4  6

进阶处理:Key不匹配/顺序不一致的情况

如果两个DataFrame的Key存在缺失或者顺序不同,可以用align方法确保只保留双方都有的Key:

# 对齐两个DataFrame的索引和列,只保留共同的Key和列
df1_aligned, df2_aligned = df1_idx[common_columns].align(df2_idx[common_columns], join='inner')

# 计算均值
result_df = (df1_aligned + df2_aligned) / 2
result_df = result_df.reset_index()

方法二:Merge合并法(适合复杂场景)

如果需要处理更复杂的匹配逻辑(比如多键匹配),可以用merge先合并两个DataFrame,再计算均值:

# 按Key合并两个DataFrame,用后缀区分来自不同DF的列
merged_df = pd.merge(df1, df2, on='Key', suffixes=('_df1', '_df2'))

# 遍历共同列,计算每列的均值
common_columns = df1.columns.drop('Key').intersection(df2.columns.drop('Key'))
for col in common_columns:
    merged_df[col] = (merged_df[f"{col}_df1"] + merged_df[f"{col}_df2"]) / 2

# 只保留需要的列:Key + 计算后的共同列
result_df = merged_df[['Key'] + list(common_columns)]

print(result_df)

为什么这是Pythonic的?

这两种方法都避免了手动遍历行,完全利用pandas的向量化操作——这种方式不仅代码更简洁,运行效率也比循环高得多,尤其是处理大数据量的时候优势明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:58:02