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



我有一个电影列表,我想将列的值更改为0,如果字符串"Action"如果字符串"戏剧性"的存在。如果两者都存在,则将值更改为0,因为类型为"动作"。

例如,我有下面的表格:

类型动作喜剧冒险电视剧犯罪恐怖动作剧情冒险

您可以将关键字extractall,并从映射字典中获取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

使用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)

相关内容

  • 没有找到相关文章

最新更新