2017-09-14 2 views
0

Ich bin neu bei Ipython und ich versuche etwas mit Dataframe Gruppierung zu tun. Ich habe einen Datenrahmen wie untenPandas Dataframe Gruppe von und agg

df_test = pd.DataFrame({"A": range(4), "B": ["B1", "B2", "B1", "B2"], "C": ["C1", "C1", np.nan, "C2"]}) 
df_test 

    A B C 
0 0 B1 C1 
1 1 B2 C1 
2 2 B1 NaN 
3 3 B2 C2 

Ich mag würde folgende Dinge erreichen:

1) Gruppe B, aber Multi-Level-Spalte statt gruppierten Zeilen mit B1 und B2 als Index, B1 und B2 zu schaffen sind im Grunde zählen

2) Spalte A und C sind agg Funktion mit etwas angewendet wie { 'C': [ 'count'], 'A': [ 'Summe']}

B 
    A B1 B2 C 
0 6 2 2 3 

wie? Danke

+0

Warum C = 3 im Ergebnis? –

+0

Zählen 1 + 1 + 1 + 0 (NaN) = 3, nicht nach Gruppe B1 oder B2 zählen, sinnvoll? meine schlechte, ich sollte ein NaN dort setzen, behoben – user3299264

Antwort

1

Sie machen separate Aktionen für jede Spalte. Sie können dies hacken, indem Sie A und C zusammenfassen und dann die Wertzählungen von B getrennt nehmen und dann die Daten wieder kombinieren.

ac = df_test.agg({'A':'sum', 'C':'count'}) 
b = df_test['B'].value_counts() 
pd.concat([ac, b]).sort_index().to_frame().T 
    A B1 B2 C 
0 6 2 2 3 
+0

danke, wie füge ich eine Ebene "B" auf B1 und B2, so dass sie in der gleichen "Gruppe" sind? – user3299264

+0

gefunden. etwas wie names = ['Level 0', 'Level 1'] cols1 = pd.MultiIndex.from_arrays ([['A', 'C', 'B', 'B', 'C', 'C'] , [A, C, B1, B2, C1, C2], Namen = Namen) df_grouped.columns = cols1 – user3299264