numpy 如何从另一个数据向NaN行添加数据

lo8azlld  于 2023-02-04  发布在  其他
关注(0)|答案(3)|浏览(108)

如何从另一个数据添加数据,但不删除NaN值?我有三个类似的数据

df_main = df_main = pd.DataFrame({'ID': ['10', '11', '12', '13', '14', '15', '16'], 'Name': [ np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]})

   ID  Name
0  10   NaN
1  11   NaN
2  12   NaN
3  13   NaN
4  14   NaN
5  15   NaN
6  16   NaN

df2 = pd.DataFrame({'ID': ['10', '11', '12'], 'Name': [ 'Peter', 'Bruce', 'Tony']})

   ID   Name
0  10  Peter
1  11  Bruce
2  12   Tony

df3 = pd.DataFrame({'ID': ['15', '16'], 'Name': ['Wanda', 'Natasha']})

   ID     Name
0  15    Wanda
1  16  Natasha

我想要的是这样的数据:

ID     Name
0  10     Peter
1  11     Bruce
2  12     Tony
3  13      NaN
4  14      NaN
5  15    Wanda
6  16  Natasha

我试过这个代码,但它不工作

for id in df2['ID'].unique():
    if id in df_main['ID'].unique():
        df_main.loc[df_main['ID'] == id, 'Name'] = df2.loc[df2['ID'] == id, 'Name']

for id in df3['ID'].unique():
    if id in df_main['ID'].unique():
        df_main.loc[df_main['ID'] == id, 'Name'] = df3.loc[df3['ID'] == id, 'Name']
qxsslcnc

qxsslcnc1#

IIUC,您可以将concatGroupBy.first一起使用:

out = pd.concat([df2, df_main, df3]).groupby("ID", as_index=False).first()

输出:

print(out)

   ID     Name
0  10    Peter
1  11    Bruce
2  12     Tony
3  13     None
4  14     None
5  15    Wanda
6  16  Natasha
cpjpxq1n

cpjpxq1n2#

concatdf2/df3map的值:

df_main['Name'] = df_main['ID'].map(pd.concat([df2, df3]).set_index('ID')['Name'])

输出:

ID     Name
0  10    Peter
1  11    Bruce
2  12     Tony
3  13      NaN
4  14      NaN
5  15    Wanda
6  16  Natasha
0s7z1bwu

0s7z1bwu3#

df_main.set_index("ID").combine_first(df2.set_index("ID"))\
    .combine_first(df3.set_index("ID")).reset_index()

出局

ID     Name
0  10    Peter
1  11    Bruce
2  12     Tony
3  13      NaN
4  14      NaN
5  15    Wanda
6  16  Natasha

相关问题