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

如何在Pandas groupby中添加多列并合并多DataFrame为单表

解决方案

一、合并已有的三个独立DataFrame

假设你已经生成了三个分别包含单一统计列的DataFrame:

  • df_max:包含member_casual和max_ride_length列
  • df_avg:包含member_casual和avg_ride_length列
  • df_day:包含member_casual和most_active_day_of_week列

方法1:使用merge逐步合并

直接通过member_casual列作为关联键,多次调用merge完成合并,最后设置索引:

# 合并三个DataFrame
merged_df = df_max.merge(df_avg, on='member_casual').merge(df_day, on='member_casual')
# 将member_casual设为索引
merged_df = merged_df.set_index('member_casual')

方法2:使用join(需先统一索引)

先将每个DataFrame的索引设为member_casual,再通过join一次性合并:

# 分别设置索引
df_max = df_max.set_index('member_casual')
df_avg = df_avg.set_index('member_casual')
df_day = df_day.set_index('member_casual')
# 合并
merged_df = df_max.join([df_avg, df_day])

二、用groupby一次性生成所有目标列(更高效)

其实不需要先拆分生成三个独立DataFrame,直接通过groupby配合agg方法,一次就能生成包含所有统计列的结果,步骤更简洁:

假设你的原始数据DataFrame为raw_df,包含member_casual、ride_length、day_of_week这几个核心列:

# 定义函数:获取出现次数最多的星期几(处理mode可能返回多个值的情况)
def get_most_active_day(series):
    return series.mode().iloc[0]

# 分组聚合一次性生成所有目标列
result_df = raw_df.groupby('member_casual').agg(
    max_ride_length=('ride_length', 'max'),  # 计算最大骑行时长
    avg_ride_length=('ride_length', 'mean'), # 计算平均骑行时长
    most_active_day_of_week=('day_of_week', get_most_active_day) # 统计最活跃的星期几
)

关键说明:

  • agg方法接受一个字典,键是你想要生成的新列名,值是元组(原始列名,聚合函数)
  • 对于most_active_day_of_week,因为mode()可能返回多个并列的结果,所以用iloc[0]取第一个结果保证返回单一值
  • 最终的result_df自动以member_casual为索引,直接包含你需要的三个统计列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:10:31