利用参考DataFrame填充主DataFrame中Trade列的NaN值
填充DataFrame中Trade列的NaN值
首先,我先理清楚你的需求:你有两个DataFrame,其中主DataFrame的Trade ID列存在3个NaN值,需要借助参考DataFrame来填充这些缺失值。下面我会给出几种简便可行的方法,你可以根据自己的参考DataFrame结构来选择。
方法1:利用映射字典填充(适合参考DF是对应关系表的情况)
假设你的参考DataFrame(我们叫它ref_df)包含Toy_company和对应的Trade ID的映射关系,步骤如下:
- 先从参考DF中创建
Toy_company到Trade ID的映射字典:
# 如果参考DF中每个Toy_company对应唯一Trade ID trade_mapping = ref_df.set_index('Toy_company')['Trade ID'].to_dict() # 如果同一个Toy_company有多个Trade ID,取出现频率最高的那个 # 也可以从主DF的非NaN行中统计生成映射: trade_mapping = main_df.dropna(subset=['Trade ID']).groupby('Toy_company')['Trade ID'].agg(lambda x: x.mode()[0]).to_dict()
- 用这个映射字典填充主DF中的NaN值:
main_df['Trade ID'] = main_df['Trade ID'].fillna(main_df['Toy_company'].map(trade_mapping))
方法2:用merge合并填充(适合参考DF包含完整对应关系)
如果参考DF包含所有Toy_company对应的Trade ID,我们可以用左连接来填充:
# 先确保参考DF中没有重复的Toy_company行(如果有,先去重) ref_df_clean = ref_df.drop_duplicates(subset=['Toy_company'], keep='first') # 左连接主DF和参考DF merged_df = main_df.merge(ref_df_clean, on='Toy_company', how='left', suffixes=('', '_ref')) # 填充NaN值 main_df['Trade ID'] = main_df['Trade ID'].fillna(merged_df['Trade ID_ref'])
方法3:用replace直接替换(适合已知具体NaN对应的Trade ID)
如果你已经明确知道每个NaN对应的Toy_company应该替换成什么Trade ID,可以直接用replace:
# 比如,195 Lego对应的Trade ID是L195/AE,256 Duplo对应的是XXX/YYY replace_dict = { '195 Lego': 'L195/AE', '256 Duplo': 'XXX/YYY' } # 定位NaN行并根据Toy_company替换 main_df.loc[main_df['Trade ID'].isna(), 'Trade ID'] = main_df.loc[main_df['Trade ID'].isna(), 'Toy_company'].map(replace_dict)
注意点
- 如果你的
Toy_company列其实是两个字段(比如代码和公司名,像192 Duplo),建议先拆分列,这样映射会更准确,避免因为字符串不一致导致填充失败。 - 如果参考DF中存在多个
Trade ID对应同一个Toy_company,你需要确定填充规则(比如取第一个、最后一个或者最频繁的)。
内容的提问来源于stack exchange,提问作者S.Gu
相关产品推荐
相关产品推荐

