我有一个将pandas数据帧作为输入的方法:
def dfColumnFilter(df, columnFilter, columnName):
''' Returns a filtered DataFrame
Keyword arguments:
df : DataFrame in which to apply the filter
columnFilter : The list of which to filter by
columnName : The DataFrame column to apply the columnFilter to '''
for column_filter in columnFilter:
df=df[df[columnName] == column_filter]
return df
问题是我该如何为n列做这项工作?
答案 0 :(得分:3)
您可以使用*args
关键字传递成对列表:
def filter_df(df, *args):
for k, v in args:
df = df[df[k] == v]
return df
可以像这样使用:
df = pd.DataFrame({'a': [1, 2, 1, 1], 'b': [1, 3, 3, 3]})
>>> filter_df(df, ('a', 1), ('b', 2))
a b
2 1 3
3 1 3
注意强>
理论上,你可以使用**kwargs
,这会更令人满意:
filter_df(df, a=1, b=2)
但是你只能将它用于名称有效的Python标识符的列。
修改强>
请参阅以下@Goyo的评论,以获得更好的实施点。
答案 1 :(得分:0)
您可以按以下方式使用
filtered_df = df[(df[column1]=='foo') & (df[column2]=='bar')]
,您可以继续执行&
和括号声明。