Python 熊猫:根据相同的ID,使用来自另一个数据帧的数据填充NA

Python 熊猫:根据相同的ID,使用来自另一个数据帧的数据填充NA,python,pandas,dataframe,Python,Pandas,Dataframe,df1缺少值: df1= 身份证年龄 1 12 2 na 3 23 4NA 5 na 6 na 我还有另一个df: df2= 身份证年龄 2 4 4 5 5 6 6 7 我想基于相同的ID,使用df2填充df1的a: df1(填充后)= 身份证年龄 1 12 2 4 3 23 4 5 5 6 6 7 您可以将ID设置为两个数据帧的索引,然后使用fillna()方法,在匹配两个数据帧的索引时填充缺少的值: df1.set_index("ID&qu

df1
缺少值:

df1=
身份证年龄
1  12 
2 na
3  23
4NA
5 na
6 na
我还有另一个
df

df2=
身份证年龄
2   4
4   5
5   6 
6   7
我想基于相同的
ID
,使用
df2
填充
df1
a

df1(填充后)=
身份证年龄
1  12 
2  4
3  23
4  5
5  6
6  7

您可以将
ID
设置为两个数据帧的索引,然后使用
fillna()
方法,在匹配两个数据帧的索引时填充缺少的值:

df1.set_index("ID").age.fillna(df2.set_index("ID").age).reset_index()

#  ID   age
#0  1   12
#1  2   4
#2  3   23
#3  4   5
#4  5   6
#5  6   7

另一个选项是,
combine_first
,它从第一个数据帧获取值,如果不是
null
,则从索引和列匹配的第二个数据帧获取值:

df1.set_index("ID").combine_first(df2.set_index("ID")).reset_index()

#  ID   age
#0  1   12.0
#1  2   4.0
#2  3   23.0
#3  4   5.0
#4  5   6.0
#5  6   7.0

检查空值的位置,然后在这些位置输入值

miss_bool = df1.age.isnull() 
df2 = df2.set_index('Id')

df1.loc[miss_bool, 'age'] = df1.loc[miss_bool, 'Id'].apply(lambda x: df2.age[x])