2016-02-01 4 views
1

У меня есть метод, который принимает панда dataframe в качестве входных данных:Фильтрация несколько столбцов панда

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 

Вопрос заключается в том, как я могу сделать эту работу для русских колонн?

ответ

2

Вы можете использовать *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 для лучшей точки зрения реализации.

+0

Я думаю, что вы можете использовать словарь синтаксис для недействительных идентификаторов:
ДФ = pd.DataFrame ({ 'первый один': [1, 2, 1, 1], 'второй один': [1, 3, 3, 3]})
filter_df (df, {'first one' = 1, 'second one' = 2}) – Goyo

+0

Спасибо, @Goyo, это очень хороший момент! –

Смежные вопросы