如何通过查看另一列在一列中填充 NaN 值

how to fill NaN value in one column by looking at other column

我想通过查看此人的姓名(在另一列中给出)在 Gender 列中填充 NaN 值。到目前为止,我已经提取了 NaNs 的男孩名字,并列出了这些名字:

boys_names = ['Robin Ounc', 'Chris Stew', 'Neil Bhor', ... and so on]

我想用 'M' 填充 df['Gender'] 列中的那些 NaN 值(如果它们的名称出现在 boys_list 中)。如果他们的名字不存在,则使用 'F'。我试过 If-Else 语句但我失败了。求助!

您可以使用:

#boys_names = ['Robin Ounc', 'Chris Stew', 'Neil Bhor', ... and so on]
df.loc[df['Gender'].isnull(), 'Gender'] = df.loc[df['Gender'].isnull(), 'name'].map(
    lambda x: 'M' if x in boys_names else 'F'
    )

一些注意事项:

  • 使用.loc选择'Gender'中为NaN的“名称”(使用pd.Series.isnull()
  • pd.Series.map 接受一个函数,其中每个数据都是串联的,并且 return 每个数据都有您的函数所做的一些更改。 (这里只是检查boys_name中是否有name
  • 使用.loc赋值回'Gender'
  • 中为NaN的"name"

我认为这可能是个好方法:

import pandas as pd
df = pd.DataFrame(
    {
        "Name": ["Jhon", "Robin Ounc", "Maria", "Alex"],
        "Gender": ["M", None, "F", None]
    }
)
boys_names = ['Robin Ounc', 'Chris Stew', 'Neil Bhor']
df["Gender"].fillna(df["Name"].isin(boys_names).map({True: "M", False: "F"}))

我刚刚在 isin 之后使用 map 函数作为 if-else 来验证 Name 是否在列表中。

您可以使用 np.select()

执行类似 this 的操作