Python: применить функцию к нескольким подмножествам фрейма данных (хранится в словаре) - PullRequest
1 голос
/ 09 февраля 2020

С уважением,

Извинения, если этот вопрос окажется дубликатом других вопросов. Но я мог найти ответ, который решает мою проблему в ее точности.

Я разделил фрейм данных, называемый «данными», на несколько поднаборов, которые хранятся в словаре фреймов данных с именем «dfs» следующим образом:

# Partition DF

dfs = {}
chunk = 5

for n in range((data.shape[0] // chunk + 1)):
    df_temp = data.iloc[n*chunk:(n+1)*chunk]
    df_temp = df_temp.reset_index(drop=True)
    dfs[n] = df_temp

Теперь я хотел бы применить предопределенная вспомогательная функция с именем «fun_ c» для КАЖДОГО из данных (которые хранятся в объекте словаря с именем «dfs»).

Правильно ли мне применять функцию к dfs в одном go, следующим образом (?):

result = fun_c(dfs)

Если нет, то каков будет правильный способ сделать это?

Ответы [ 2 ]

1 голос
/ 09 февраля 2020

это зависит от того, какой выход вы ищете:

  • Если вы хотите использовать диктовку в выводе, тогда вам следует применить функцию к каждому элементу диктов
result = dict({key: fun_c(val) for key, val in dfs.items()})
  • Если вам нужен список данных / значений в выходных данных, тогда примените функцию к каждому значению dict
result = [fun_c(val) for val in dfs.items()]

Но этот стиль также не является неправильным, вы можете повторить как бы вам ни нравилась вспомогательная функция:

def fun_c(dfs):

    result = None
    # either
    for key, val in dfs.items():
        pass
    # or
    for val in dfs.values():
        pass
    return result

Дайте мне знать, если это поможет!

1 голос
/ 09 февраля 2020

Так как вы хотите это:

Теперь я хотел бы применить предопределенную вспомогательную функцию под названием "fun_ c" для КАЖДОГО кадра данных (которые хранятся в объекте словаря называется "dfs").

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

dfs = {0 : df0, 1: df1, 2: df2, 3:df3}

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

dfs_result = {k:fun_c[v] for k, v in dfs.items()}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...