【问题标题】:replace NaNs in the merged dataframe based on the condition --(Python,Pandas)根据条件替换合并数据框中的 NaN --(Python,Pandas)
【发布时间】:2018-10-23 02:30:11
【问题描述】:

我有 2 个数据框 df1

ID     df1_Members
100    Eric
200    Chris
300    Jordan
400    Samantha
600    Audrey

df2

ID    df2_Members
100   Eric
200   Chris
300   Jordan
400   NaN
500   NaN

我正在合并数据框`

df_merge=pd.merge(df1,df2,on='ID',how='left')

合并后的数据框看起来像这样

ID  df1_Members  df2_Members
100  Eric         Eric
200  Chris        Chris
300  Jordan        Jordan
400  Samantha      NaN
600  Audrey        NaN

我想将 ID 400 对应的 NaN 替换为“无数据”,将 600 对应的 ID 替换为“ID 不存在”,因为 ID 600 不在 df2 中

我正在尝试这样做,但它不起作用

if (df_merge['df2_Members']==np.nan) & (df1['ID'].isin(df2['ID'])):
    df_merge['df2_Members'].fillna('No Data',inplace=True)
#ID in df1 doesn't exist in df2
elif (df_merge['df2_Members']==np.nan) &(~df1['ID'].isin(df2['ID'])):
    df_merge['df2_Members']="ID doesn't exist in df2"

`

【问题讨论】:

  • 您的问题令人困惑:ID 600 不在 df 和 df2 中,ID 400 和 500 都是 NaN,因此生成的 df 不能是您所显示的。

标签: python pandas


【解决方案1】:

试试这个:

df_merge.loc[(df_merge['df2_Members'].isna()) & (df_merge['ID'].isin(df2['ID'])), 'df2_Members'] = 'No Data'
df_merge.loc[(df_merge['df2_Members'].isna()) & (~df_merge['ID'].isin(df2['ID'])), 'df2_Members'] = "ID doesn't exist in df2"

df_merge

应该返回你想要的

    ID  df1_Members df2_Members
0   100 Eric        Eric
1   200 Chris       Chris
2   300 Jordan      Jordan
3   400 Samantha    No Data
4   500 Audrey      No Data
5   600 Johnny      ID doesn't exist in df2

我添加了 ID 600 作为 df2 中不存在的另一个名称

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-24
    • 2021-07-21
    • 2019-02-12
    • 1970-01-01
    • 2020-07-05
    • 2018-11-29
    • 2022-01-24
    • 2017-12-05
    相关资源
    最近更新 更多