python - 如果其他列中的字符串包含列表中的内容,则更新一列中的值

标签 python pandas replace iteration conditional-statements

  id name             gender
0 13 John Smith       0
1 46 Jim Jeffries     2
2 75 Jennifer Johnson 0
3 37 Sam Adams        0
4 24 John Cleese      0
5 17 Taika Waititi    0

我在 df 中有很多人的名字和性别,取自电影 Actor 的数据库。性别被指定为 1(女性)、2(男性)或 0(未列出)。我想梳理一下,并无情地按名字假设性别。姓名将存储在列表中,并手动填写。也许我通过 ID 发现某人的名字与性别无关,然后自己查明他们是男性/女性,我也想将其注入(inject):

m_names = ['John', ...]
f_names = ['Jennifer', ...]
m_ids   = ['37', ...]
f_ids   = ['', ...]

我可以很好地控制 for 循环和 np.where,但我不知道如何逐行通过这个 df。

如果使用上面的内容,我想要返回的内容将如下所示:

for index, row in df.iterrows():
  if row['gender'] == 0:
    if   row['name'].str.contains(' |'.join(f_names)) or row['id'].str.contains('|'.join(f_ids)):
      return 1
    elif row['name'].str.contains(' |'.join(m_names)) or row['id'].str.contains('|'.join(m_ids)):
      return 2
print(df)

  id name             gender
0 13 John Smith       2
1 46 Jim Jeffries     2
2 75 Jennifer Johnson 1
3 37 Sam Adams        2
4 24 John Cleese      2
5 17 Taika Waititi    0

注意“|”之前的空格在名称条件中,避免抓取姓氏的任何部分。

此时,我在如何格式化 if 语句方面遇到了困难。 Python 不喜欢我的格式,并说我的“返回”是“外部函数”。如果我将这些更改为

row['gender'] = #

我遇到了 unicode 以及“str”和“contains”的使用问题。

最佳答案

您可以使用 Pandas 函数 isin

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.isin.html

df.loc[df.name.isin(m_names), 'gender'] = 2

关于python - 如果其他列中的字符串包含列表中的内容,则更新一列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52315644/

相关文章:

python - Matplotlib python 动画不显示线

python - 使用补充列从 numpy 数组初始化 DataFrame

python - 将站点包复制到我自己的元素中以获得 'local copy'

python - 调用 python 脚本并在网页上填充结果

python - 如何从数据框创建列表?

javascript用点/ Paypal 替换逗号

javascript - 搜索并替换影响部分单词的正则表达式

PHP - 删除字符串中 HTML 标签的效果 - 但也显示它们?

python django动态压缩和下载

python - 从所有列中获取唯一值的高效而优雅的方式 - 大数据