动作喜剧冒险 电视剧犯罪恐怖动作剧情冒险
我有一个电影列表,我想将列的值更改为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)