2017-08-24 2 views
1

Je voudrais ajouter de nouvelles colonnes à une fonction en utilisant la trame de données et les valeurs de la trame de données d'origineAjout de plusieurs colonnes de valeurs calculées uniques à un pandas géants dataframe

Créer le dataframe

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

Fonction de test à appliquer aux colonnes existantes

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

arguments de la fonction - chaque nouvelle colonne a des arguments

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

Créer de nouveaux noms de colonnes pour les nouvelles colonnes à ajouter à la trame de données

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

en boucle à travers les colonnes existantes appliquant la fonction et les arguments appropriés pour cette colonne. Chaque nouvelle colonne recevra un nom unique.

Cette partie fonctionne pas!

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

La nouvelle trame de données doit contenir 10 colonnes.

Répondre

0

Vous pouvez essayer cette

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