如何合并三个Pandas DataFrame并保留全部用户数据?
解决方法
问题核心是当前流程只覆盖了有活动记录的用户,要保留users_df里的全部154个用户,需要先把用户表和活动记录表做关联,再生成透视表。
具体步骤:
- 按原有逻辑合并
user_records_df与activities_df,得到带活动名称的记录数据 - 将上述结果与
users_df做左连接(以users_df为基准),确保所有用户都被保留,无活动记录的用户对应字段会显示NaN - 基于包含所有用户的数据集生成透视表
修改后的完整代码:
# 合并活动记录与活动名称 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
相关产品推荐
相关产品推荐

