【问题标题】:How to impute columns value in one dataframe from that of another dataframe如何将一个数据帧中的列值与另一个数据帧的列值相比较
【发布时间】:2020-01-26 02:36:41
【问题描述】:

我有两个数据框 df1 和 df2 如下。我需要将 df1 中的“未知”替换为 df2 中的相应值。 df1 和 df2 都具有相同的列名“FIRST NAME”和“gender”,而 df1 具有更多具有重复值的行,以及此处未显示的其他列。我编写了如下代码,但抛出了错误。如何解决?谢谢!

df1['gender'] = df1['gender'][df1['gender']=='unknown'].map(df2.set_index('FIRST_NAME')['gender'])

InvalidIndexError: Reindexing only valid with uniquely valued Index objects

【问题讨论】:

  • 请告诉我我的解决方案是否有效
  • 我尝试了前两个,但没有工作。 InvalidIndexError:重新索引仅对具有唯一值的索引对象有效
  • df1['gender'] = df1['FIRST NAME'].map(df2.drop_duplicates().set_index('FIRST NAME')['gender']).where(m,df1['gender']) check section DUPLICATES VALUES of my solution

标签: python pandas dataframe


【解决方案1】:

Series.mapDataFrame.loc 一起使用

m = df1['gender'].eq('unknown')
df1.loc['gender',m] = df1.loc[m,'FIRST NAME'].map(df2.set_index('FIRST NAME')['gender'])

Series.where

df1['gender'] = df1['FIRST NAME'].map(df2.set_index('FIRST NAME')['gender']).where(m,df1['gender'])

重复值

如果df2['FIRST NAME'] 中有重复值,则需要使用DataFrame.drop_duplicates 如果性别和名字都重复:

df1['gender'] = df1['FIRST NAME'].map(df2.drop_duplicates().set_index('FIRST NAME')['gender']).where(m,df1['gender'])

如果同一个名字需要不同的性别,则使用DataFrame.merge

df1 = df1[['FIRST NAME']].merge(df2,on ='FIRST NAME',how = 'left')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多