Pandas 为dataframe单元格中的列表元素编写if语句

Pandas 为dataframe单元格中的列表元素编写if语句,pandas,string,list,dataframe,if-statement,Pandas,String,List,Dataframe,If Statement,我有一个带有列“genres”的熊猫数据框,其中包含一个列表作为单元格值: import pandas df = pd.DataFrame([ { "title": "The Godfather: Part II", "genres": ["crime", "drama"], "director": "Fracis Ford Coppola&q

我有一个带有列“genres”的熊猫数据框,其中包含一个列表作为单元格值:

import pandas
df = pd.DataFrame([
{
    "title": "The Godfather: Part II",
    "genres": ["crime", "drama"],
    "director": "Fracis Ford Coppola"
},
{
    "title": "The Dark Knight",
    "genres": ["actionmovie", "crime", "drama"],
    "director": "Christopher Nolan"
}
])
我正试图编写一个if语句来添加一个列“action\u crime\u movie”,根据类型列表中字符串元素的匹配部分,该列的值为True或False。 换句话说:第二行包含单词“action”(在“actionmovie”中)和“crime”(在“crime”中),因此它应该具有“action\u crime\u movie”的真实值

但是,在上面的查询中,该值被设置为False


有人能帮我解决这个问题吗?

您可以使用
apply lambda

df["action_crime_movie"] = df["genres"].apply(lambda x: True if ("action" in str(x)) and ("crime" in str(x)) else False)

print(df["action_crime_movie"])
0    False
1     True
Name: action_crime_movie, dtype: bool

感谢您提供了这个很好的解决方案!如果我想在另一列中结合使用“or”/“and”语句,该怎么办?例如:“action_crime_movie_Nolan”只有在上述语句为真且“director”=“Christopher Nolan”@olive时才能为真,然后您必须在axis=1的完整数据帧上应用lambda函数,在该函数中,您可以通过简单的索引访问列。会是这样的。df.apply(lambda x:True如果str(x[“类型”])中的(“动作”)和str(x[“类型”])中的(“犯罪”)和(x[“导演”]=“克里斯托弗·诺兰”)中的其他项为False,axis=1)完美,非常感谢!我所有的问题都是solved@olive我的荣幸!
df["action_crime_movie"] = df["genres"].apply(lambda x: True if ("action" in str(x)) and ("crime" in str(x)) else False)

print(df["action_crime_movie"])
0    False
1     True
Name: action_crime_movie, dtype: bool