【问题标题】:Pandas query based on the list of columns and values基于列和值列表的 Pandas 查询
【发布时间】:2021-06-12 00:25:51
【问题描述】:

有没有一种方法可以根据列和列应该采用的关联值列表来自动化 Pandas 中的过滤过程?

请看这里的例子:

import pandas as pd
import seaborn as sns

df = sns.load_dataset('tips')

columns = ['sex']
values = ['Female']

df.query(@columns in @values)

columns2 = ['sex', 'smoker']
values2 = ['Male', 'Yes']
df.query(@columns2 in @values2)

当然,这行不通,但有办法吗?

关键是解决方案应该概括,因为列表的长度可能不同。

【问题讨论】:

  • 我想你在找loc
  • df.query("sex=='Female'")df.query("sex=='Male' and smoker=='Yes'")
  • 大家好,我不知道“手动”过滤,但我需要一个通用的解决方案。

标签: python pandas filter


【解决方案1】:
  • 您需要符合query的要求
  • 列表理解f-strings很简单
import pandas as pd
import seaborn as sns

df = sns.load_dataset('tips')

columns = ['sex']
values = ['Female']

df.query(" and ".join([f"{c}=='{values[i]}'" for i,c in enumerate(columns)]))

columns2 = ['sex', 'smoker']
values2 = ['Male', 'Yes']
df.query(" and ".join([f"{c}=='{values2[i]}'" for i,c in enumerate(columns2)]))

【讨论】:

  • 我觉得zip 在这里" and ".join([f"{c}=='{v}'" for c, v in zip(columns2, values2)]) 可能更清楚,但否则我同意这是要走的路。
  • join 也可以带生成器,所以你可以省略多余的[],例如" and ".join(f"{c}=='{values[i]}'" for i,c in enumerate(columns))
猜你喜欢
  • 2014-10-31
  • 2022-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多