2017-08-24 39 views
1

我想新列使用功能和值从原始数据帧添加独特的计算值的多个列的熊猫数据帧

添加到数据帧创建数据框

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列。

回答

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 
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