Pandas-fill na使用来自基于相同ID的另一个数据帧的数据

时间:2017-01-20 22:59:45

标签: python pandas dataframe

df1缺少值:

df1=
ID age 
1` 12 
2  na
3  23
4  na
5  na
6  na 

我有另一个df:

df2=
ID age
2   4
4   5
5   6 
6   7

我想基于相同的ID使用df2填充df1的na:

df1 (after fillna)=
ID age 
1` 12 
2  4
3  23
4  5
5  6
6  7

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以将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,如果不为空则从第一个数据帧获取值,否则从索引和列匹配的第二个数据帧获取值:

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

答案 1 :(得分: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])