python - 使用 dataframe.query 从 pd.DataFrame 中包含的列表中选择值

标签 python python-3.x pandas dataframe

我想提取/过滤包含列表中字符串的数据帧的行,在这种情况下,我尝试使用查询,因为它们通常非常适合这项工作并且在代码中非常优雅,我已经尝试过:

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/

相关文章:

python - 仅 Google 自定义搜索 Python 购物结果?

python - os.environ 对 C 扩展模块的可见性

pandas - 在 groupby 对象上应用 set_index 以便为每个组应用 asfreq

python - 连接 Pandas 数据帧时整数变成 float

python - 无法单击下拉列表 Selenium 中的选项

python - 如何最好地从 openCV 中的现有图像创建新图像

python - 更新 panda 中的整个 Excel 行

python - 为什么 sum(DF) 的行为与 DF.sum() 不同?

python - 从 Python 中打开的文件中获取路径

python - 在当前类中循环调用另一个类函数