根据列列表和值列表过滤 Pandas 数据框

时间:2021-03-16 20:16:03

标签: python pandas numpy

我希望能够使用 2 个列表过滤熊猫。 一个列表包含要过滤的列,第二个列表包含应分别选择第一个列表中哪些列的值。

我准备了一个例子:

import seaborn as sns
import pandas as pd

dataf = sns.load_dataset('tips')

cols = ['tip', 'sex']
vals = [1.01, 'Female']

cols2 = ['tip', 'smoker', 'day']
vals2 = [3.00, 'No', 'Sun']

# Pseudo idea of what I need
# Pseudo idea of what I need
dataf.loc[lambda d: d[cols] == vals]
# should be equal to
dataf.loc[(dataf['sex'] == 'Female') & (dataf['tip'] == 1.01)]


dataf.loc[lambda d: d[cols2] == vals2]
# should be equal to
dataf.loc[(dataf['smoker'] == 'No') & (dataf['tip'] == 3) & (dataf['day'] == 'Sun')]

我还给出了我需要什么的想法。但是,这应该是可推广的非常重要,这意味着 cols 和 cols2 可以包含不同数量的元素。

len(cols) == len(vals) ...

1 个答案:

答案 0 :(得分:1)

此代码将仅提供具有所有所需值数组中的值的行:

dataf.loc[:, cols][np.product(np.int8(dataf.loc[:, cols].isin(vals)), axis=1, dtype=bool)]

输出:


tip sex
0   1.01    Female

干杯。