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

如何合并三个Pandas DataFrame并保留全部用户数据?

解决方法

问题核心是当前流程只覆盖了有活动记录的用户,要保留users_df里的全部154个用户,需要先把用户表和活动记录表做关联,再生成透视表。

具体步骤:

  1. 按原有逻辑合并user_records_df与activities_df,得到带活动名称的记录数据
  2. 将上述结果与users_df做左连接(以users_df为基准),确保所有用户都被保留,无活动记录的用户对应字段会显示NaN
  3. 基于包含所有用户的数据集生成透视表

修改后的完整代码:

# 合并活动记录与活动名称
merged_records_activity_df = pd.merge(user_records_df, activities_df, on='activityId', how='left')

# 左连接用户表,保留全部用户
all_users_records = pd.merge(users_df, merged_records_activity_df, left_on='id', right_on='userId', how='left')

# 生成包含所有用户的透视表
pivot_table = all_users_records.pivot_table(
    index='id',  # 以用户表的id作为索引,确保无活动用户不丢失
    columns='title',
    values='completedDate',
    aggfunc='first'
).reset_index()

# 可选:若需保留用户姓名,可将姓名加入透视表索引
# pivot_table = all_users_records.pivot_table(
#     index=['id', 'firstName', 'lastName'],
#     columns='title',
#     values='completedDate',
#     aggfunc='first'
# ).reset_index()

关键说明

  • 左连接(how='left')以users_df为左表,是保留所有用户的核心操作
  • 透视表索引使用users_df的id字段,避免无活动用户因缺失userId被过滤
  • 无活动记录的用户,对应活动列的值会显示NaN,符合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:21:01