我需要以这种方式基于其他列填充一列的字段:
第一个 df 有两列 - 孩子的姓名和年龄,但有些行是 NaN,但是不应该对 NaN 做任何事情,只需忽略它们。但是年龄应该根据第二个df填写。
第一个 df:
data = {'Name Kids': ['Valentina', 'Mark', 'Sofia', np.nan, 'Manny', 'Alex', 'Claire', np.nan, np.nan],
'Age Kids': [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]
}
df = pd.DataFrame (data, columns = ['Name Kids','Age Kids'])
print (df)
这是:
Name Kids Age Kids
0 Valentina NaN
1 Mark NaN
2 Sofia NaN
3 NaN NaN
4 Manny NaN
5 Alex NaN
6 Claire NaN
7 NaN NaN
8 NaN NaN
因此,基于第二个 df,应将孩子的年龄插入到第一个 df 中。然而,在这个df中的孩子比第一个多,但是加号的孩子不应该被复制。
第二个df:
data1 = {'Children Names': ['Eloise', 'Valentina', 'Brian', 'Daphne', 'Mark', 'Sofia', 'Betty', 'Manny', 'Ronnie', 'Alex', 'Claire'],
'Children Ages': [17, 13, 11, 7, 12, 3, 16, 10, 1, 5, 14]
}
df1 = pd.DataFrame (data1, columns = ['Children Names', 'Children Ages'])
print (df1)
这是:
Children Names Children Ages
0 Eloise 17
1 Valentina 13
2 Brian 11
3 Daphne 7
4 Mark 12
5 Sofia 3
6 Betty 16
7 Manny 10
8 Ronnie 1
9 Alex 5
10 Claire 14
因此,最后一个 df 如果第一个但是修改了,这样在第二个 df 中也找到的孩子现在有了匹配的年龄。
最终 df 是第一个但已修改:
Name Kids Age Kids
0 Valentina 13.0
1 Mark 12.0
2 Sofia 3.0
3 NaN NaN
4 Manny 10.0
5 Alex 5.0
6 Claire 14.0
7 NaN NaN
8 NaN NaN
我尝试过类似的方法,但我不知道如何验证匹配的名称以及如何将年龄从第二个 df 复制到第一个 df。
df.loc[df['Name Kids'] != np.nan, 'Age Kids'] =
如何得到最终结果?我对此很陌生,如果您能帮助我,我真的需要帮助!
答案 0 :(得分:1)
您可以使用 .map
来映射姓名匹配的年龄。
df['Age Kids'] = df['Name Kids'].map(dict(df1[['Children Names', 'Children Ages']].to_numpy())
答案 1 :(得分:0)