Эффективно применить одну и ту же операцию к нескольким фреймам данных - PullRequest
0 голосов
/ 23 мая 2019

У меня есть два фрейма данных с одинаковыми столбцами и схожим содержимым.

Я бы хотел применить одинаковые функции к каждому, не прибегая к грубому форсированию или конкатенации dfs.Я пытался передать объекты во вложенные словари, но это, кажется, больше проблем, чем стоит (я не думаю, что dataframe.to_dict поддерживает передачу в существующий список).

Однако, похоже, что цикл for хранитсписок dfs в объекте df, и я не знаю, как вернуть его к исходному dfs ... см. мой пример ниже.

df1 = {'Column1': [1,2,2,4,5],
        'Column2': ["A","B","B","D","E"]}
df1 = pd.DataFrame(df1, columns=['Column1','Column2'])

df2 = {'Column1': [2,11,2,2,14],
         'Column2': ["B","Y","B","B","V"]}
df2 = pd.DataFrame(df2, columns=['Column1','Column2'])


def filter_fun(df1, df2):
    for df in (df1, df2):
        df = df[(df['Column1']==2) & (df['Column2'].isin(['B']))]
    return df1, df2

filter_fun(df1, df2)

Ответы [ 2 ]

2 голосов
/ 23 мая 2019

Если вы напишите фильтр как функцию, вы можете применить его в понимании списка:

def filter(df):
    return df[(df['Column1']==2) & (df['Column2'].isin(['B']))]


df1, df2 = [filter(df) for df in (df1, df2)]
1 голос
/ 23 мая 2019

Я бы рекомендовал объединение с указанным пользователем keys, потому что 1) его легко назначить обратно, и 2) вы можете выполнить одну и ту же операцию один раз вместо двух.

# Concatenate df1 and df2
df = pd.concat([df1, df2], keys=['a', 'b'])
# Perform your operation
out = df[(df['Column1'] == 2) & df['Column2'].isin(['B'])]

out.loc['a'] # result for `df1`

   Column1 Column2
1        2       B
2        2       B

out.loc['b'] # result for `df2`

   Column1 Column2
0        2       B
2        2       B
3        2       B

Это должноотлично работает для большинства операций.Для группового режима вы также хотите группировать на уровне индекса 0 th .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...