2016-03-24 29 views
2

ich eine CSV-Datei haben, wenn ich in Pandas Datenrahmen zu lesen, es sieht aus wie:Python Pandas: split einen Datenrahmen basierend auf einem Spaltenwert

data = pd.read_csv('test1.csv') 
print(data) 

Ausgabe wie folgt aussieht:

v1 v2 v3 result 
0 12 31 31  0 
1 34 52 4  1 
2 32 4 5  1 
3 7 89 2  0 

Gibt es eine Möglichkeit, die Datenrahmenbasis auf den Wert in der Ergebnisspalte zu trennen.Ie Wenn das Ergebnis = 0, gehen Sie zu einem neuen Datenrahmen data_0:

v1 v2 v3 result 
0 12 31 31  0 
1 7 89 2  0 

und wenn das Ergebnis = 1, gehen Sie zu einem Datenrahmen data_1

v1 v2 v3 result 
0 34 52 4  1 
1 32 4 5  1 

Gibt es eine Pandas Funktion kann tun Das? Oder ich muss meine eigene Schleifenfunktion schreiben, um zwei Datenrahmen zu erstellen? Danke vielmals!

Antwort

2

Pandas ermöglichen es Ihnen, die Daten auf sehr einfache Weise zu teilen und zu bearbeiten. Sie können auch das gleiche wie Yakym mit dem Schlüssel statt Attributnamen zugreifen.

data_0 = data[data['result'] == 0] 
data_1 = data[data['result'] == 1] 

Sie können sogar Ergebnisse Spalten hinzufügen, indem Sie Zeilendaten zu manipulieren direkt zB:

data['v_sum'] = data[v1] + data[v2] + data[v3] 
0
df1 = data[data.result==0] 
df2 = data[data.result==1] 

Werfen Sie einen Blick auf this.

0

Sie versuchen dictionary von DataFrames von groupby erstellen können, wenn Spalte result viele verschiedene Werte hat:

print data 
    v1 v2 v3 result 
0 12 31 31  0 
1 34 52 4  1 
2 32 4 5  1 
3 7 89 2  0 

datas = {} 
for i, g in data.groupby('result'): 
    #print 'data_' + str(i) 
    #print g 
    datas.update({'data_' + str(i) : g.reset_index(drop=True)}) 

print datas['data_0'] 
    v1 v2 v3 result 
0 12 31 31  0 
1 7 89 2  0 

print datas['data_1'] 
    v1 v2 v3 result 
0 34 52 4  1 
1 32 4 5  1 
Verwandte Themen