Я пытаюсь условно отфильтровать фрейм данных, где я собираюсь циклически перемещаться по столбцам и списку его значений для условной фильтрации, но результирующий фрейм данных был отфильтрован неправильно. Я использовал известный метод фильтрации для pandas кадра данных на SO
, например post 1 , post2 , и я хочу параметризовать эти процессы выбора данных в функции, но циклически проходить по столбцам со списком значений не работает правильно. Любая возможная идея, чтобы преодолеть эту проблему? любая мысль?
минимальный воспроизводимый пример :
вот минимальный воспроизводимый пример для gist , который я использовал в своей попытке.
моя попытка :
Я попробовал этот подход, и он работал довольно хорошо, но я хочу параметризоваться в функции.
import pandas as pd
df = pd.read_csv('minimal_df.csv', encoding='utf-8')
df= df[(df['meat_type']=='Beef') & (df['trade_type']=='E') & (df['origin']=='US') & (df['date'] >'2014-01-01') & (df['date'] <'2019-01-01')]
как я уже сказал, я хочу чтобы обернуть функцию фильтрации данных, чтобы я мог сделать что-то вроде этого:
def data_filter(df, colList, vaList, startDate, endDate):
for col in colList:
for val in vaList:
masker = df[df[col]==val]
masker.reset_index(drop=True)
masker = masker.loc[(masker['date']> startDate) & (masker['date'] < endDate)]
return masker
columns = ['meat_type', 'temperature','origin']
values = ['Beef', 'Frozen','US']
dat_filter(df=df, colList=columns, vaList=values, startDate='2013-12-31', endDate='2019-01-01')
, но такая попытка не работает для меня, потому что полученный отфильтрованный кадр данных фактически не был отфильтрован. Любая идея, чтобы заставить это работать правильно?
Как я могу сделать свою функцию еще более эффективной, например, вместо использования массива в качестве параметра, есть ли лучший способ передать параметр в функцию, чтобы мы могли выбрать несколько столбцов со списком значений? Какие-нибудь мысли? Спасибо