pandas 如何在 Dataframe 中使用pythons in operator搜索字符串并在同一 Dataframe 的新列中返回布尔值

vlf7wbxs  于 2023-01-28  发布在  Python
关注(0)|答案(1)|浏览(60)

我有一个包含电影数据的 Dataframe df。x1c 0d1x。
我想在df中创建一个名为“drama_movie”的新列,其中包含的值为True,表示电影是Drama,如果不是,则为False。
我尝试了以下代码:df["drama_movie"]=df['listed_in'].isin(["Dramas"])

  • 〉但是我在drama_movie列中接收到的所有内容都是False。
    当我尝试下面的代码:df["drama_movie"]=df.apply(lambda x: x['listed_in'] in x['Dramas'], axis=1)
  • 〉我收到一个键错误“戏剧”
    以下代码有效:df["drama_movie"] = df['listed_in'].str.contains('Dramas', case=False, na=False)
  • 〉但是我需要在operator中使用python,不知怎么的我就卡住了。有什么建议吗?谢谢你的帮助
kqqjbcuj

kqqjbcuj1#

您可以拆分字符串,然后分解列表,然后只保留符合条件的行:

drama_movies = (df.loc[df['listed_in'].str.split(',').explode()
                                      .loc[lambda x: x.isin(['Dramas'])].index])

此处不要使用apply或使用理解:

drama_movies = df[['Dramas' in s.split(',') for s in df['listed_in']]]

# For 200 rows
# apply: 1.16 ms ± 20.1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
# comprehension: 156 µs ± 262 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

相关问题