Pandas:根据列中存在的字符串更改列的值

8hhllhi2  于 2023-04-19  发布在  其他
关注(0)|答案(2)|浏览(110)

我有一个电影列表,如果列中存在字符串“Action”,我想将列的值更改为0,如果存在字符串“Drama”,则更改为1。如果两者都存在,则将值更改为0,因为流派“Action”更重要。
例如,假设我有下面的表格:
| 类型|
| --------------|
| 动作喜剧冒险|
| 犯罪恐怖剧|
| 动作戏剧冒险|
我想把它改成这样:
| 类型|
| --------------|
| 0|
| 1|
| 0|
任何帮助将不胜感激!谢谢!

hgqdbh6s

hgqdbh6s1#

你可以extractall你的关键字,和map从Map字典,在多个匹配的情况下,让我们得到min数字(如果需要,你可以使用另一个规则):

import re

d = {'Action': 0, 'Drama': 1}

pattern = f"({'|'.join(map(re.escape, d))})"
# pattern = '(Drama|Action)'

df['Genres'] = (df['Genres'].str.extractall(pattern)[0]
                 .map(d).groupby(level=0).min()
               )

输出:

Genres
0       0
1       1
2       0

如果我们添加另一行而没有匹配,则输出:

Genres
0     0.0
1     1.0
2     0.0
3     NaN
bsxbgnwa

bsxbgnwa2#

使用numpy.select,如果两者都不匹配,则通过参数default设置NaN

#if test substrings
m1 = df['Genres'].str.contains('Drama')
m2 = df['Genres'].str.contains('Action')

#if test lists
m1 = ['Drama' in x for x in df['Genres']]
m2 = ['Action' in x for x in df['Genres']]

df['Genres'] = np.select([(m1 & m2) | m2, m1], [0, 1], default=np.nan)

相关问题