2014-04-07 13 views
5

ich einen Datenrahmen der folgende Form haben:eine Pandas Dataframe Bestücken frome einen anderen Datenrahmen basierend auf Spaltennamen

a b c 
0 1 4 6 
1 3 2 4 
2 4 1 5 

Und ich habe eine Liste von Spaltennamen, die ich verwenden müssen, um einen neuen Datenrahmen mit der erstellen Spalten des ersten DataFrames, die jedem Label entsprechen. wenn meine Liste der Spalten Zum Beispiel ist [ 'a', 'b', 'b', 'a', 'c'], sollte der resultierende Datenrahmen sein:

a b b a c 
0 1 4 4 1 6 
1 3 2 2 3 4 
2 4 1 1 4 5 

Ich habe versucht, zu finde einen schnellen Weg, um diese Operationen auszuführen, weil ich mit extrem großen DataFrames zu tun habe und ich denke nicht, dass Looping eine vernünftige Option ist.

+0

Sie sollten 'pandas.melt' verwenden und doppelte Spalten vermeiden. –

Antwort

6

Sie können nur die Liste verwenden, um sie auszuwählen:

In [44]: 

cols = ['a', 'b', 'b', 'a', 'c'] 
df[cols] 
Out[44]: 
    a b b a c 
0 1 4 4 1 6 
1 3 2 2 3 4 
2 4 1 1 4 5 

[3 rows x 5 columns] 

keine Notwendigkeit für eine Schleife Also, wenn Sie Ihre Datenrahmen df dann eine Liste der Spaltennamen werden nur indizieren sie erstellt haben und die df erstellen Sie wollen.

3

Sie können das direkt tun:

>>> df 
    a b c 
0 1 4 6 
1 3 2 4 
2 4 1 5 

>>> column_names 
['a', 'b', 'b', 'a', 'c'] 

>>> df[column_names] 
    a b b a c 
0 1 4 4 1 6 
1 3 2 2 3 4 
2 4 1 1 4 5 

[3 rows x 5 columns] 
0

Von 0.17 ab können Sie reindex wie

In [795]: cols = ['a', 'b', 'b', 'a', 'c'] 

In [796]: df.reindex(columns=cols) 
Out[796]: 
    a b b a c 
0 1 4 4 1 6 
1 3 2 2 3 4 
2 4 1 1 4 5 

verwenden Hinweis: Im Idealfall doppelte Spaltennamen haben, wollen Sie nicht zu.

Verwandte Themen