将多列唯一计算值添加到pandas数据帧

时间:2017-08-24 03:05:32

标签: python pandas dataframe assign

我想使用原始数据框中的函数和值将新列添加到数据框

创建数据框

df = pd.DataFrame({'f1'   : np.random.randn(10), 
                   'f2'   : np.random.randn(10),
                   'f3'   : np.random.randn(10),
                   'f4'   : np.random.randn(10),
                   'f5'   : np.random.randn(10)})

要应用于现有列的测试功能

def testfun(x,n):
    return x * n

函数的参数 - 每个新列都有不同的参数

colnum   = [1,2,3,4,5]

为要添加到数据框的新列创建新列名称

newcol         = [s + "_D" for s in df.columns]

循环应用该列的函数和适当参数的现有列。每个新列都将分配一个唯一的名称。

此部分功能不起作用!

for s in range(len(df.columns)):    
     df       = df.assign(newcol[s] = testfun(df[[df.columns[s]]], s))

新数据框应包含10列。

2 个答案:

答案 0 :(得分:0)

你可以试试这个

import pandas as pd
import numpy as np

df = pd.DataFrame({'f1'   : np.random.randn(10), 
                   'f2'   : np.random.randn(10),
                   'f3'   : np.random.randn(10),
                   'f4'   : np.random.randn(10),
                   'f5'   : np.random.randn(10)})

def testfun(x,n):
    return x * n

colnum = [1,2,3,4,5]
newcol = [s + "_D" for s in df.columns]
for s in range(len(df.columns)):    
    df.loc[:,newcol[s]] = df[[df.columns[s]]]*s

答案 1 :(得分:0)

IIUC

df.join(df.mul([1, 2, 3, 4, 5]).add_suffix('_D'))

         f1        f2        f3        f4        f5      f1_D      f2_D      f3_D      f4_D      f5_D
0 -1.036309  0.094285  1.296874  1.154490  0.034166 -1.036309  0.188570  3.890622  4.617961  0.170830
1 -1.015998  0.180154 -0.332444  2.007173 -0.807009 -1.015998  0.360308 -0.997331  8.028691 -4.035047
2  0.125456 -0.758892 -0.028901 -2.053950  0.665908  0.125456 -1.517783 -0.086704 -8.215801  3.329542
3 -1.097128  1.455765 -0.336339  1.076013  0.714174 -1.097128  2.911530 -1.009017  4.304054  3.570869
4 -0.314902 -1.148362 -0.123719 -0.055161  0.436508 -0.314902 -2.296724 -0.371157 -0.220642  2.182539
5  0.718147 -0.029205 -0.649937 -1.046908 -0.965463  0.718147 -0.058410 -1.949812 -4.187633 -4.827316
6  0.454862  0.218846 -0.185591 -0.105686 -1.459477  0.454862  0.437693 -0.556774 -0.422745 -7.297384
7  0.613794 -2.635875 -0.083078  1.180391 -0.256504  0.613794 -5.271751 -0.249233  4.721563 -1.282521
8  0.283366  0.256394 -0.222937  1.171640  0.351768  0.283366  0.512789 -0.668811  4.686561  1.758840
9  0.653707 -0.336425  0.328433 -0.460891 -0.631990  0.653707 -0.672851  0.985298 -1.843564 -3.159948