Python 如何使用不同数量的关键字条件筛选数据帧

Python 如何使用不同数量的关键字条件筛选数据帧,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我理解使用&基于多个条件过滤数据帧行的概念,但如何根据传递到函数中的条件(**kwargs)的数量以迭代的方式编写 我正试图在一个for循环中这样做,该循环遍历一个数据帧列表(replist)。传递的关键字是字符串,这些字符串的键对应于另一个字典(kwarg_dict)。基本上,如果我通过 func(fruit='apple', veggie='kale') 我想从replist中包含的数据框构建一个数据框,其中水果列是“apple”,蔬菜列是“kale”。但是,如果我通过 func(frui

我理解使用&基于多个条件过滤数据帧行的概念,但如何根据传递到函数中的条件(**kwargs)的数量以迭代的方式编写

我正试图在一个for循环中这样做,该循环遍历一个数据帧列表(replist)。传递的关键字是字符串,这些字符串的键对应于另一个字典(kwarg_dict)。基本上,如果我通过

func(fruit='apple', veggie='kale')
我想从replist中包含的数据框构建一个数据框,其中水果列是“apple”,蔬菜列是“kale”。但是,如果我通过

func(fruit='apple', veggie='kale', dessert='cake')
我想构建一个包含所有三个参数的数据框架。用户应该能够传递任意数量的参数,因此逻辑&s的数量将有所不同

例如,如果我有两个关键字,我会使用:

sub_df = pd.concat(
         [sub_df, replist[i][
                             (replist[i][kwarg_dict[list(kwargs)[0]]] == kwargs[list(kwargs)[0]]) &
                             (replist[i][kwarg_dict[list(kwargs)[1]]] == kwargs[list(kwargs)[1]])
                              ]
          ])
sub_df = pd.concat(
         [sub_df, replist[i][
                             (replist[i][kwarg_dict[list(kwargs)[0]]] == kwargs[list(kwargs)[0]]) &
                             (replist[i][kwarg_dict[list(kwargs)[1]]] == kwargs[list(kwargs)[1]]) &
                             (replist[i][kwarg_dict[list(kwargs)[2]]] == kwargs[list(kwargs)[2]])
                              ]
          ])
但对于三个关键词,我会使用:

sub_df = pd.concat(
         [sub_df, replist[i][
                             (replist[i][kwarg_dict[list(kwargs)[0]]] == kwargs[list(kwargs)[0]]) &
                             (replist[i][kwarg_dict[list(kwargs)[1]]] == kwargs[list(kwargs)[1]])
                              ]
          ])
sub_df = pd.concat(
         [sub_df, replist[i][
                             (replist[i][kwarg_dict[list(kwargs)[0]]] == kwargs[list(kwargs)[0]]) &
                             (replist[i][kwarg_dict[list(kwargs)[1]]] == kwargs[list(kwargs)[1]]) &
                             (replist[i][kwarg_dict[list(kwargs)[2]]] == kwargs[list(kwargs)[2]])
                              ]
          ])
这正是我想要的,但显然对于传递的任何数量的关键字都不是通用的


很明显,我需要在范围内迭代(len(kwargs)),但我不确定如何按照上面所示的方式将迭代的输出与逻辑&语句串在一起。谢谢你的帮助

使用列表理解来概括您的示例:

f=[replist[i][kwarg_dict[var]==kwargs[var]用于列表中的var(kwargs)]
pd.concat([子DF,回复列表[i][f]]
但是,我确实认为您最好使用并简单地传递
kwargs.keys()

您可以这样做(虽然不是很优雅,但它确实做到了):