Pandas通过乘以其他列来创建列

svmlkihl  于 2023-06-04  发布在  其他
关注(0)|答案(2)|浏览(123)

我有一个数据框,下面有列

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]})

对于上面的数据框,我想将Month和hours列乘以其他列。例如,t0_p0 * Month_1、t0_p0 * Month_2、...、't2_P3'* Month_2,小时数也是如此。我不想把一个月乘以一小时。
相乘的结果应添加到名为Month1_t0_p0或Hour2_t2_p3的新列中。所以基本上是两列的名字相乘放在一起。
pythonic的方法是什么我知道如何将列相乘,如:

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

但是,我不确定如何自动选择我想要相乘的列,并以我上面描述的方式创建和命名列。

jrcvhitl

jrcvhitl1#

你可以这样做:

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
djp7away

djp7away2#

作为一个初学者:创建一个新的df,其中只包含要与之相乘的列,然后迭代新的df。通过串联,用新列和那些你不想相乘的列创建最终的df。我不确定如何自动生成列的名称,也没有迭代的确切代码。抱歉就像我说的,也许是一个开始。

相关问题