2015-09-23 18 views
6

Czy istnieje sposób podziału ramki danych pandy na podstawie nazwy kolumny? Jako przykład rozważ ramka danych ma następujące kolumny df = ['A_x', 'B_x', 'C_x', 'A_y', 'B_y', 'C_y'] i chcę utworzyć dwie ramki danych X = ['A_x', 'B_x', 'C_x'] i Y = ['A_y', 'B_y', 'C_y'].Podział ramki danych pandy na podstawie nazwy kolumny

wiem, istnieje możliwość, aby to zrobić:

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

ale to nie byłby idealny, jak w moim przypadku mam 2200 kolumn w df. Czy istnieje bardziej eleganckie rozwiązanie?

+0

jest liczba podziałów (np X i Y w Twoim przypadku) Limited? – joris

+0

@joris tak. W moim przypadku mam równe kolumny x i y i wymagam podziału na dwie partycje (jedną z x i drugą z y) – Segmented

+0

, których nie trzeba, wystarczy zwykłe maskowanie: np. 'x = df [['A_x', 'B_x', 'C_x']]' – Anzel

Odpowiedz

10

Można użyć df.filter(regex=...):

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

daje

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

dzięki za rozwiązanie i wyjaśnienie! – Segmented

Powiązane problemy