2017-06-19 9 views
2

Ich habe eine tsv-Datei mit mehreren Spalten. Es gibt 10 und mehr Spalten, aber die Spalten, die mir wichtig sind, sind diejenigen mit dem Namen benutzername, shift_id, url_id. Ich möchte einen Datenrahmen erstellen, der zuerst die gesamte CSV-Datei basierend auf Benutzernamen trennt, d. H. Nur Zeilen mit demselben Benutzernamen werden zusammen gruppiert. Aus diesem Chunk mache ich einen weiteren Chunk, in dem nur Zeilen mit bestimmten shift_id gruppiert werden und dann aus diesem Chunk einen Chunk mit derselben URL erstellen. Leider kann ich die Daten aufgrund der Unternehmensregel nicht teilen und eine imaginäre Datentabelle könnte verwirrender sein.Aufteilen einer CSV-Datei in Panda-Datenrahmen durch mehrere Spalten

Zwei der anderen Spalten haben Zeitstempel. Ich möchte die Zeitdauer des Chunks berechnen, aber erst, nachdem ich Chunk nach diesen Spalten gruppiert habe.

Ich habe Antworten gesehen, die Datenrahmen um einen bestimmten Spaltenwert teilen, aber in meinem Fall habe ich drei Spaltenwerte und die Reihenfolge, in der sie getrennt sind, zählt auch.

Vielen Dank für Ihre Hilfe!

+0

Meinst du nur 'Dataframe', das nur 3 Spalten auswählt, die wichtig sind? – 0p3n5ourcE

+1

Wie wäre es damit, uns Daten oder Code oder irgendetwas wirklich zu zeigen? –

+0

@ Open-Source Hat meine Hilfe bearbeitet? –

Antwort

1

Angenommen, Sie die Spalten zu lesen dataframe

df = pd.DataFrame({'col1':[1,2,3], 'col2':[4,5,6],'col3':[7,8,9], 
       'col4':[1,2,3],'col5':[1,2,3],'col6':[1,2,3], 
       'col7':[1,2,3],'col8':[1,2,3],'col9':[1,2,3], 
       'col91':[1,2,3]}) 
print(df) 

Ausgang:

 col1 col2 col3 col4 col5 col6 col7 col8 col9 col91 
0  1  4  7  1  1  1  1  1  1  1 
1  2  5  8  2  2  2  2  2  2  2 
2  3  6  9  3  3  3  3  3  3  3 

Jetzt können wir nur drei Spalten von Interesse wählen, lassen Sie es col1, col2, and col3 sein

tmp_df = df[['col1', 'col2', 'col3']] 
print(tmp_df) 

Ausgang :

 col1 col2 col3 
0  1  4  7 
1  2  5  8 
2  3  6  9 

Weitere wollen wir auf drei Spaltenwerte filtern:

final_df = tmp_df[(tmp_df.col1 == 1) & (tmp_df.col2 == 4) & (tmp_df.col3== 7)] 
print(final_df) 

Ausgang:

col1 col2 col3 
0  1  4  7 

Nach dem dataframe Lesen, all diese oben genannten Schritte können in einzelnen Zeile acheived werden:

final = df[['col1', 'col2', 'col3']][(df.col1 == 1) & (df.col2 == 4) & (df.col3== 7)] 
final 

Hoffe es hilft!

Update:

df = pd.DataFrame({'col1':[1,1,1,1,1], 'col2':[4,4,4,4,7],'col3':[7,7,9,7,7], 
       'col4':['X','X','X','X','X'],'col5':['X','X','X','X','X'],'col6':['X','X','X','X','X'], 
       'col7':['X','X','X','X','X'],'col8':['X','X','X','X','X'],'col9':['X','X','X','X','X'], 
       'col91':['X','X','X','X','X']}) 
print(df) 

Ausgang:

 col1 col2 col3 col4 col5 col6 col7 col8 col9 col91 
0  1  4  7 X X X X X X  X 
1  1  4  7 X X X X X X  X 
2  1  4  9 X X X X X X  X 
3  1  4  7 X X X X X X  X 
4  1  7  7 X X X X X X  X 

Nun usinig ähnliche Maskierung wie oben:

final = df[(df.col1 == 1) & (df.col2 == 4) & (df.col3== 7)] 
final 

Ausgang:

col1 col2 col3 col4 col5 col6 col7 col8 col9 col91 
0  1  4  7 X X X X X X  X 
1  1  4  7 X X X X X X  X 
3  1  4  7 X X X X X X  X 
+0

Das ist großartig. Aber nehmen wir an, Sie haben mehr Zeilen mit 1 in Spalte1, mehr verschiedene Zeilen mit 4 in Spalte2 und mehr mit 7 in Spalte 3. Da die Reihenfolge zählt, möchte ich zuerst alle Zeilen, die 1 in Spalte1 hat. Dann möchte ich aus diesen Zeilen alle Zeilen, die 4 in col2 haben und dann aus diesen Zeilen Zeilen mit 7 in col3. Am Ende werde ich Zeilen mit 1 in Spalte 1, 4 in Spalte 2 und 7 in Spalte 3 zusammen mit anderen Spalten mit unterschiedlichem Wert haben. Ich muss dann auf den anderen Spalten operieren. Ich hoffe, das hat geholfen. Vielen Dank für Ihre Zeit und Geduld. Ich schulde dir viel Zeit!! –

+0

@BinamrataSharma Ich habe den aktualisierten Abschnitt hinzugefügt, weiß nicht, ob es das ist, was Sie meinten. Ich weiß immer noch nicht, warum das Bestellen wichtig ist, da wir nach einer Kreuzung von drei Spalten suchen. – 0p3n5ourcE

+1

Das ist gut. Ich werde versuchen, von hier fortzufahren. Aber anstatt col1 == 1 zu sagen, wollte ich etwas generisches wie für jeden eindeutigen Wert in dieser Spalte, weil es unmöglich ist, eindeutige Werte in allen Spalten manuell zu verfolgen. Aber das ist ein guter Anfang. –

Verwandte Themen