pandas 按值切片

pandas slicing by value

Python 3.6 pandas 1.1.2 windows 10

我正在尝试找到一种可扩展的方法来根据值选择对 pandas DataFrame 进行切片。示例:

df = pd.DataFrame({'c1': ['a', 'c', 'c'], 
                   'c2': ['c', 'c', 'c'], 
                   'c3': ['b', 'c', 'c'],})

给出:

     c1 c2 c3
   0  a  c  b
   1  c  c  c
   2  c  c  c

如果列 c1 和 c3 都包含“a”或“b”,现在对 DataFrame 进行切片:

criteria = ['a', 'b']
new_df = df[((df.c1 == criteria[0]) | (df.c1 == criteria[1])) & \
            ((df.c3 == criteria[0]) | (df.c3 == criteria[1]))]

给出:

   c1 c2 c3
0  a  c  a

我遇到的问题是,如果我的标准是比这 2 个元素('a'、'b')更长的列表,那么该过程将变得难以扩展。

你可以试试isin,然后all:

# more values here
vals = ['a','b', 'e', 'f', 'g', 'h']

df[df[['c1','c3']].isin(vals).all(1)]

输出:

  c1 c2 c3
0  a  c  b