如何用一行简洁代码按列合并两个Pandas聚合DataFrame?
问题描述
我正在使用Pandas进行Kaggle泰坦尼克号竞赛的数据分析。我有两个通过以下代码生成的聚合DataFrame:
train_df[['Parch', 'Survived']].groupby(['Parch'], as_index=False).count().rename(columns={'Survived':"Count"}).reset_index(drop=True) train_df[['Parch', 'Survived']].groupby(['Parch'], as_index=False).mean().rename(columns={'Survived':"Surviving rate"}).reset_index(drop=True)
我尝试用以下代码按列合并它们,但觉得过于繁琐:
tmp_df = train_df[['Parch','Survived']].groupby(['Parch'], as_index=False).agg({"Survived": ["count","mean"]}).reset_index(drop=True) tmp_df.columns = tmp_df.columns.droplevel() tmp_df.columns = ["Parch", "Count", "Surviving rate"]
请问如何用一行简洁的代码按列合并这两个DataFrame?
简洁实现方案
可以利用Pandas的命名聚合语法(0.25+版本支持),直接在agg方法中指定自定义列名,一步完成聚合与合并:
tmp_df = train_df[['Parch', 'Survived']].groupby('Parch', as_index=False).agg(Count=('Survived', 'count'), Surviving_rate=('Survived', 'mean'))
核心优势
- 无需处理多级列索引,生成的DataFrame直接是单级列结构,列名就是我们需要的
Parch、Count、Surviving_rate。 - 省略了后续重置索引、调整列名的额外步骤,一行代码完成所有需求。
内容的提问来源于stack exchange,提问作者Umgee
相关产品推荐
相关产品推荐

