Динамически добавлять столбцы в dataframe через apply - PullRequest
0 голосов
/ 06 июня 2018

Следующий код применяет функцию f к столбцу данных data_df["c"] и объединяет результаты в исходный кадр данных, то есть объединяет 1024 столбца с кадром данных data_df.

data_df = apply_and_concat(data_df, "c", lambda x: f(x, y), [y + "-dim" + str(i) for i in range(0,1024)])

def apply_and_concat(df, field, func, column_names):
    return pd.concat((
        df,
        df[field].apply(
            lambda cell: pd.Series(func(cell), index=column_names))), axis=1)

Проблемаэто то, что я хочу выполнить это динамически, а это означает, что я не знаю, сколько столбцов он возвращает.f возвращает список.Есть ли лучший или простой способ добавить эти столбцы без необходимости указывать количество столбцов раньше?

1 Ответ

0 голосов
/ 06 июня 2018

Ваше использование pd.concat(df, df.apply(...), axis=1) уже хорошо решает основную задачу.Похоже, ваш главный вопрос действительно сводится к тому, «как назвать неизвестное количество столбцов», где вы будете рады использовать имя, основанное на последовательных целых числах.Для этого используйте itertools.count():

import itertools

f_modified = lambda x: dict(zip(
    ('{}-dim{}'.format(y, i) for i in itertools.count()),
    f(x, y)
))

Затем используйте f_modified вместо f.Таким образом, вы получаете словарь вместо списка с произвольным числом динамически генерируемых имен в качестве ключей.При преобразовании этого словаря в серию вы получите ключи, используемые в качестве индекса, поэтому вам не нужно предоставлять явный список в качестве индекса, и, следовательно, вам не нужно знать количество столбцов ввперед.

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