我想提取/过滤包含列表中字符串的数据帧的行,在这种情况下,我尝试使用查询,因为它们通常非常适合这项工作并且在代码中非常优雅,我已经尝试过:
my_list = ['red', 'blue', 'green', 'yellow']
df_new = df.query("`User Color` in @my_list")
我正在寻找一个类似于 in
的函数(如果包含字符串)
我的数据框 df 看起来有点像这样:
name id User Color Age
Luis 876 blue, green 35
Charles 12 blue, brown 34
Luna 654 black 24
Anna 987 brown 19
Silvana 31 red, black 26
Juliet 55 red 20
我期望的输出应该是:
name id User Color Age
Luis 876 blue, green 35
Charles 12 blue, brown 34
Silvana 31 red, black 26
Juliet 55 red 20
最佳答案
您需要拆分每行中的值,并检查所选列表中是否存在这些值。
这可以通过 map 函数来完成
df_subset = df[df['User Color'].map(lambda val: any(x in my_list for x in val.split(',')))]
由于它是字符串匹配,因此根据您的要求考虑 strip 化并降低分割值。
与上面类似的代码,但具有描述性:
def filter_color(val):
for x in val.split(','):
if x.lower().strip() in my_list:
return True
return False
df_subset = df[df['name'].map(filter_color)]
关于python - 使用 dataframe.query 从 pd.DataFrame 中包含的列表中选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65133389/