2016-05-18 3 views
1

ich eine Spalte mehrere Zeit von einem df wieerstellen mehrere Spalten von 1 Spalte Pandas

df.head() 

         close 
date      
2015-09-23 17:00:00 1.3324 
2015-09-23 17:01:00 1.3325 
2015-09-23 17:02:00 1.3323 
2015-09-23 17:03:00 1.3323 
2015-09-23 17:04:00 1.3323 

aus einer bestimmten Liste von Namen zu kopieren versuchen, mag ich, dass colum so oft kopieren, da es Name in meiner Liste:

list =['a','b','c'] 

und bekommen

df.head() 

         close a  b  c 
date      
2015-09-23 17:00:00 1.3324 1.3324 1.3324 1.3324 
2015-09-23 17:01:00 1.3325 1.3325 1.3325 1.3325 
2015-09-23 17:02:00 1.3323 1.3323 1.3323 1.3323 
2015-09-23 17:03:00 1.3323 1.3323 1.3323 1.3323 
2015-09-23 17:04:00 1.3323 1.3323 1.3323 1.3323 

ich versuchte

df[list] = df 

Die Spalten müssen jedoch dieselbe Länge wie der Schlüssel haben. Danke für Ihre Hilfe!

Antwort

1

Der einfachste Weg wäre durch die Liste zu durchlaufen und eine neue Spalte für jeden Schlüssel erstellen (Seite beachten: Sie sollten wahrscheinlich vermeiden list als Name einer Variablen verwenden, da Sie die native list überschrieben werden):

keys = ['a','b','c'] 
for k in keys: 
    df[k] = df['close'] 

Wenn Sie es in einer Zeile tun wollen, ohne eine Schleife, können Sie wie folgt vorgehen:

keys = ['a','b','c'] 
df = df.join(pd.concat([df.close]*len(keys), keys=keys)) 

bewegen sich nach außen von der Mitte schafft [df.close]*len(keys) eine Liste mit so vielen Kopien des Originals da Taframe-Spalte, da in Ihrer Liste Schlüssel vorhanden sind. Diese werden dann unter Verwendung von pd.concat() zu einem Datenrahmen kombiniert, wobei die Spaltennamen mit Ihrer Liste (keys=keys) festgelegt werden. Jetzt, da Sie einen Datenrahmen mit Ihren doppelten Spalten haben, können Sie ihn zum ursprünglichen Datenrahmen hinzufügen, indem Sie df.join() verwenden.

+0

ya diese Arbeit nur gut, danke! Ich versuche, mich von der Schleife fernzuhalten, aber ich schätze, ich werde das verwenden :) über die Liste: nimm dir die gute Nachricht, danke! –

+0

danke, das ist, was ich gesucht habe! –

1

können Sie verwenden concat:

li = ['a','b','c'] 

df1 = pd.concat([df['close']]*(len(li)+1), axis=1, keys=['close'] + li) 
print (df1) 
         close  a  b  c 
date            
2015-09-23 17:00:00 1.3324 1.3324 1.3324 1.3324 
2015-09-23 17:01:00 1.3325 1.3325 1.3325 1.3325 
2015-09-23 17:02:00 1.3323 1.3323 1.3323 1.3323 
2015-09-23 17:03:00 1.3323 1.3323 1.3323 1.3323 
2015-09-23 17:04:00 1.3323 1.3323 1.3323 1.3323 
+0

danke funktioniert auch! –