如何在Pandas中计算两个DataFrame的均值并按原列名合并?
解决DataFrame均值结果按原列名合并的问题
问题场景
有两个DataFrame,计算各自列均值后,原列名成为结果DataFrame的索引,无法直接使用pd.merge的on参数按原列名合并。
示例数据
import pandas as pd df = pd.DataFrame({ 'sepal_length': [5.1, 4.9, 4.7, 4.6, 5.0, 5.4, 4.6, 5.0], 'sepal_width': [3.5, 3.0, 3.2, 3.1, 3.6, 3.9, 3.4, 3.4], 'petal_length': [1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5], 'petal_width': [0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2] }) df2 = pd.DataFrame({ 'sepal_length': [0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2], 'sepal_width': [3.5, 3.0, 3.2, 3.1, 3.6, 3.9, 3.4, 3.4], 'petal_length': [1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5], 'petal_width': [1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5] })
均值计算代码
df_one=df.mean(axis=0).to_frame('Mean_One') df_two=df2.mean(axis=0).to_frame('Mean_Two')
解决方案
方法1:直接使用join合并(最简方案)
两个结果DataFrame的索引均为原列名且完全匹配,直接用join即可按索引合并:
merged_df = df_one.join(df_two)
方法2:重置索引后使用merge
将索引转换为普通列,再通过merge的on参数指定合并列:
# 重置索引,将原列名转为名为feature的普通列 df_one_reset = df_one.reset_index().rename(columns={'index': 'feature'}) df_two_reset = df_two.reset_index().rename(columns={'index': 'feature'}) # 按feature列合并 merged_df = pd.merge(df_one_reset, df_two_reset, on='feature')
方法3:计算均值时直接保留列名为普通列
在计算均值的步骤中就通过reset_index将原列名转为列,后续直接合并:
# 计算均值时直接把索引转为列,指定列名 df_one = df.mean(axis=0).reset_index(name='Mean_One') df_two = df2.mean(axis=0).reset_index(name='Mean_Two') # 按index列合并,可重命名列名让结果更清晰 merged_df = pd.merge(df_one, df_two, on='index').rename(columns={'index': 'feature'})
内容的提问来源于stack exchange,提问作者Allen
相关产品推荐
相关产品推荐

