2015-09-23 24 views
6

Gibt es eine Möglichkeit, einen Pandas Datenrahmen basierend auf dem Spaltennamen zu teilen? Als Beispiel betrachte der Datenrahmen die folgenden Spalten df = ['A_x', 'B_x', 'C_x', 'A_y', 'B_y', 'C_y'] und ich möchte zwei Datenrahmen X = ['A_x', 'B_x', 'C_x'] und Y = ['A_y', 'B_y', 'C_y'] erstellen.Aufteilen von Pandas Datenrahmen basierend auf Spaltenname

ich weiß, gibt es eine Möglichkeit, dies zu tun:

d = {'A': df.A_x, 'B': df.B_x, 'C': df.B_x} 
X = pd.DataFrame (data=d) 

aber dies wäre nicht ideal sein, wie in meinem Fall habe ich 2200 Spalten in df haben. Gibt es eine elegantere Lösung?

+0

Ist die Anzahl der Teilungen (zB die x und y in Ihrem Fall) begrenzt? – joris

+0

@joris ja. In meinem Fall habe ich gleiche x und y Spalten und ich brauche in zwei Partitionen (eine mit dem x und die andere mit y) zu teilen – Segmented

+0

Sie brauchen nicht, nur einfache Maskierung wird tun: dh. 'x = df [['A_x', 'B_x', 'C_x']]' – Anzel

Antwort

10

könnten Sie df.filter(regex=...) verwenden:

import numpy as np 
import pandas as pd 
df = pd.DataFrame(np.random.randn(2, 10), 
        columns='Time A_x A_y A_z B_x B_y B_z C_x C_y C-Z'.split()) 
X = df.filter(regex='_x') 
Y = df.filter(regex='_y') 

ergibt

In [15]: X 
Out[15]: 
     A_x  B_x  C_x 
0 -0.706589 1.031368 -0.950931 
1 0.727826 0.879408 -0.049865 

In [16]: Y 
Out[16]: 
     A_y  B_y  C_y 
0 -0.663647 0.635540 -0.532605 
1 0.326718 0.189333 -0.803648 
+0

danke für die Lösung und Erklärung! – Segmented

Verwandte Themen