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

基于共同user_id,用另一DataFrame填充目标列的NaN值

Hey there! 看你的描述,应该是要处理这两个带user_id的DataFrame,特别是df_A里每个用户那条time_calc为NaN的记录对吧?我给你整理了几种常见操作的实现方式:

操作方案整理

1. 提取df_A中每个用户的NaN记录

首先我们需要把df_A里每个用户唯一的time_calc为空的行筛选出来,因为你明确每个用户只有一条这样的记录,直接过滤就好:

import pandas as pd

# 筛选time_calc为NaN的行
df_A_nan = df_A[df_A['time_calc'].isna()]

2. 与df_B基于user_id合并

因为两个DataFrame共享user_id字段,我们可以用Pandas的merge方法关联。根据你的需求不同,选择不同的连接方式:

  • 内连接:只保留两边都存在user_id的记录(默认行为)
merged_inner = df_A_nan.merge(df_B, on='user_id')
  • 左连接:保留df_A_nan的所有记录,匹配df_B中对应的用户(如果有的话)
merged_left = df_A_nan.merge(df_B, on='user_id', how='left')
  • 右连接:保留df_B的所有用户记录,匹配df_A中对应的NaN记录(如果有的话)
merged_right = df_A_nan.merge(df_B, on='user_id', how='right')

3. 用df_B的数据填充df_A的NaN值

如果你的需求是把df_B中的某个字段值填充到df_A的time_calcNaN位置,可以这么做:

# 假设df_B有个字段叫`fill_value`用来填充
df_B_fill = df_B[['user_id', 'fill_value']]

# 先把df_B的填充字段合并到df_A
df_A_merged = df_A.merge(df_B_fill, on='user_id', how='left')

# 用fill_value填充time_calc的NaN
df_A_filled = df_A_merged.assign(
    time_calc=lambda x: x['time_calc'].fillna(x['fill_value'])
)

# 移除临时的fill_value列(可选)
df_A_filled = df_A_filled.drop('fill_value', axis=1)

验证结果

做完操作后,记得检查结果是否符合预期:

# 检查df_A填充后是否还有NaN
print("剩余NaN数量:", df_A_filled['time_calc'].isna().sum())

# 查看合并后的前几条记录
print(merged_inner.head())

内容的提问来源于stack exchange,提问作者add-semi-colons

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:10:07