我有一个数据框,其中包含有关电影的信息.它有一个名为的列genre,其中包含它所属的类型列表.例如:
df['genre']
## returns
0 ['comedy', 'sci-fi']
1 ['action', 'romance', 'comedy']
2 ['documentary']
3 ['crime','horror']
...
Run Code Online (Sandbox Code Playgroud)
我想知道如何查询数据帧,所以它返回属于cerain类型的电影?
例如,某些东西可能会df['genre'].contains('comedy')返回0或1.
我知道列表,我可以这样做:
'comedy' in ['comedy', 'sci-fi']
Run Code Online (Sandbox Code Playgroud)
但是,在大熊猫中,我没有找到类似的东西,我唯一知道的是df['genre'].str.contains(),但它对列表类型不起作用.
jez*_*ael 25
您可以使用apply创建mask然后boolean indexing:
mask = df.genre.apply(lambda x: 'comedy' in x)
df1 = df[mask]
print (df1)
genre
0 [comedy, sci-fi]
1 [action, romance, comedy]
Run Code Online (Sandbox Code Playgroud)
piR*_*red 13
使用集
df.genre.map(set(['comedy']).issubset)
0 True
1 True
2 False
3 False
dtype: bool
Run Code Online (Sandbox Code Playgroud)
df.genre[df.genre.map(set(['comedy']).issubset)]
0 [comedy, sci-fi]
1 [action, romance, comedy]
dtype: object
Run Code Online (Sandbox Code Playgroud)
以一种我更喜欢的方式呈现
comedy = set(['comedy'])
iscomedy = comedy.issubset
df[df.genre.map(iscomedy)]
Run Code Online (Sandbox Code Playgroud)
更高效
comedy = set(['comedy'])
iscomedy = comedy.issubset
df[[iscomedy(l) for l in df.genre.values.tolist()]]
Run Code Online (Sandbox Code Playgroud)
使用str两遍
慢!并不完全准确!
df[df.genre.str.join(' ').str.contains('comedy')]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12210 次 |
| 最近记录: |