2016-09-05 2 views
0

Ich habe Datenrahmen wie diesewie in komplizierten Zustand in Pandas GROUPBY

 A B C 
0 1 7 a 
1 2 8 b 
2 3 9 c 
3 4 10 a 
4 5 11 b 
5 6 12 c 

Ich möchte groupby Ergebnis (key = Spalte C) unten bekommen;

A B 
d 12 36 

"d" bedeutet a oder b,

so würde ich nur mit "a" und "b" GROUPBY mag.

und dann zusammen als "d".

, wenn ich mit allen wichtigen Elemente zusammenzufassen dann fallen, ist es viel Zeit in Anspruch nehmen ....

+0

Sie möchten also Zeilen mit 'c' in Spalte' C' fallen lassen? – Psidom

+0

danke für die frühe Antwort .yes! Ich möchte c in Spalte C fallen lassen – Heisenberg

Antwort

1

Eine Option ist pandas zu verwenden where die C-Säule zu transformieren, so dass dort, wo es wurde a oder bd wird und dann können Sie die transformierte Spalte und führen Sie die normale Zusammenfassung auf sie GROUPBY, und wenn Zeilen mit c nicht erwünscht ist, können Sie einfach fallen sie nach der Zusammenfassung:

df_sum = df.groupby(df.C.where(~df.C.isin(['a', 'b']), "d")).sum().reset_index() 

df_sum 
# C A B 
#0 c 9 21 
#1 d 12 36 

df_sum.loc[df_sum.C == "d"] 

# C A B 
#1 d 12 36 

Um deutlicher zu sehen, wie die where Klausel funktioniert:

df.C.where(~df.C.isin(['a','b']), 'd') 

# 0 d 
# 1 d 
# 2 c 
# 3 d 
# 4 d 
# 5 c 
# Name: C, dtype: object 

Es wirkt wie ein Verfahren ersetzen und a und b mit d ersetzen, die zusammen gruppiert werden, wenn zu groupby Funktion übergeben.