我希望能够使用 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) ...
答案 0 :(得分:1)
此代码将仅提供具有所有所需值数组中的值的行:
dataf.loc[:, cols][np.product(np.int8(dataf.loc[:, cols].isin(vals)), axis=1, dtype=bool)]
输出:
tip sex
0 1.01 Female
干杯。