pythoni c способ применения нескольких фильтров к фрейму данных на основе пользовательского ввода - PullRequest
2 голосов
/ 11 июля 2020

Предположим, у меня есть фреймворк знаменитостей с их возрастом, этнической принадлежностью, ростом, отраслью и т. Д. c.

Я хочу создать функцию, в которой я могу систематически фильтровать фрейм данных, чтобы можно было применять несколько фильтров .

например,

def filter_data(df, filter_col, filter_val, filter_amount):
    if filter_amount == 1:
        df = df[df.filter_col[0] == filter_val[0]]
    if filter_amount == 2:
        df = df[(df.filter_col[0] == filter_val[0]) & (df.filter_col[1] == filter_val[1])]

    etc

Где filter_col - это список столбцов, по которым вы будете sh фильтровать, а filter_val также является списком значений, а filter_amount - целым числом * 1008. *

Я хочу, чтобы он был систематическим, чтобы при любом количестве фильтров он продолжал фильтровать набор данных на основе значений списка без необходимости вручную кодировать его

help.

1 Ответ

2 голосов
/ 11 июля 2020

Поскольку фильтр выполняет и (&), имеет смысл сделать это так:

import pandas as pd

def filter_data(df, filter_col, filter_val, filter_amount):
    out = df.copy()
    for i in range(filter_amount):
        out = out[out[filter_col[i]] == filter_val[i]]
    return out

def main():
    x = pd.DataFrame({"Age": [12, 44, 23], "Ethnicity": ["White", "Black", "White"], "Height": [180, 182, 168]})
    #    Age Ethnicity  Height
    # 0   12     White     180
    # 1   44     Black     182
    # 2   23     White     168

    y = filter_data(x, ["Ethnicity", "Height"], ["White", 180], 1)
    #    Age Ethnicity  Height
    # 0   12     White     180
    # 2   23     White     168

    z = filter_data(x, ["Ethnicity", "Height"], ["White", 180], 2)
    #    Age Ethnicity  Height
    # 0   12     White     180
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...