Pandas создание столбцов путем умножения других столбцов - PullRequest
0 голосов
/ 04 марта 2020

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

df = pd.DataFrame({'t0_p0':[1,2,3], 't1_p0':[1,2,3], 't2_p0':[1,2,3], 't0_p1':[1,2,3], 't1_p1':[1,2,3], 't2_p1':[1,2,3], 't0_p3':[1,2,3], 't1_p3':[1,2,3], 't2_p3':[1,2,3], 'Month_1':[1,0,0],'Month_2':[0,1,0] 'Hour_1':[1,0,0],'Hour_2':[0,1,0], 'x_1':[0,1,1], 'holid':[2,7,8]})

С фреймом данных выше я хочу умножить столбцы Месяц и часы на каждый из остальных столбцов. Например, t0_p0 * Month_1, t0_p0 * Month_2, ..., 't2_P3' * Month_2 и то же самое для часов. Я не буду умножать месяц на час.

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

каков будет способ pythoni c сделать это. Я знаю, как умножать столбцы, например:

df['Month1_t0_p0'] = df['Month_1'] * df['t0_p0']

Однако я не уверен, как автоматически выбирать столбцы, которые я хочу умножить, и создавать и называть столбцы так, как я описал выше.

пожалуйста, помогите мне здесь.

Большое вам спасибо.

Ответы [ 2 ]

2 голосов
/ 04 марта 2020

Вы можете сделать это:

import numpy as np
import pandas as pd

df = pd.DataFrame({'t0_p0':[1,2,3],
                   't1_p0':[1,2,3],
                   't2_p0':[1,2,3],
                   't0_p1':[1,2,3],
                   't1_p1':[1,2,3],
                   't2_p1':[1,2,3],
                   't0_p3':[1,2,3],
                   't1_p3':[1,2,3],
                   't2_p3':[1,2,3],
                   'Month_1':[1,0,0],
                   'Month_2':[0,1,0],
                   'Hour_1':[1,0,0],
                   'Hour_2':[0,1,0],
                   'x_1':[0,1,1],
                   'holid':[2,7,8]})

cols_tp = df.columns[df.columns.str.startswith('t')]
cols_m = df.columns[df.columns.str.lower().str.startswith('m')]

for col_tp in cols_tp:
    for col_m in cols_m:
        df[col_m + '_' +  col_tp] = df[col_m] * df[col_tp]


df
0 голосов
/ 04 марта 2020

Может быть, для начала: создайте новый df только с теми столбцами, с которыми вы хотите умножиться, затем выполните итерацию по этому новому df. Путем конкатенации создайте окончательный df с новыми столбцами и теми, с которыми вы не хотели умножаться. Однако я не уверен, как автоматически генерировать имя столбцов, и у меня нет точного кода для итерации. Простите за это. Как сказал, может быть, стартер.

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