如何根据 Python 中的其他列填充字段?

时间:2021-03-29 12:11:03

标签: python pandas dataframe

我需要以这种方式基于其他列填充一列的字段:

第一个 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'] = 

如何得到最终结果?我对此很陌生,如果您能帮助我,我真的需要帮助!

2 个答案:

答案 0 :(得分:1)

您可以使用 .map 来映射姓名匹配的年龄。

df['Age Kids'] = df['Name Kids'].map(dict(df1[['Children Names', 'Children Ages']].to_numpy())

答案 1 :(得分:0)

您可以使用 update()

1- 需要替换的列必须同名。
2- 基于索引的替换值

df = df.rename(columns={"Age Kids":"Children Ages"})
df = df.set_index('Name Kids')
df.update(df1.set_index('Children Names'))
df = df.reset_index()
df = df.rename(columns={"Children Ages":"Age Kids"})
display(df)

输出

enter image description here