簡體   English   中英

過濾多列 Pandas

[英]Filtering multiple columns 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 列起作用?

您可以使用*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 下面的評論。

您可以使用如下

filtered_df = df[(df[column1]=='foo') & (df[column2]=='bar')]

你可以繼續&和 parentesis 語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM