2017-12-08 5 views
0

ich einen Datenrahmen haben, die wie folgt aussieht:Pandas aggregierte Daten und ordnen über Spalten

 Values State Sort 
3 a  Open 42 
4 b  Close 42 
5 d  Open 42 
6 c  Open 42 
7 b  Open 42 
8 a  Open 45 
9 d  Open 45 
10 a  Open 45 
11 c  Open 45 
12 c  Open 45 
13 d  Open 45 
14 d  Open 46 
15 b  Open 46 
16 b  Open 46 
17 c  Open 46 
18 a  Open 46 

Wie kann ich die Daten aggregiert, so dass sie die Werte in den Spalten „Werte“ zählt und ordnet die Daten über Spalten pro die Werte in der Spalte "Sortieren" wie unten aussehen:

Values State 42 45 46 
a  Open 1 2 1 
b  Close 1 0 0 
b  Open 1 0 2 
c  Open 1 2 1 
d  Open 1 2 1 

ich schrieb den folgenden Code für die gleiche

tables_df = pd.DataFrame(alerts_df.groupby(['Values','State','Sort']).size().rename('Count')) 
tables_df = pd.pivot_table(alerts_df, index=['Values','State'], columns=['Sort'], values=['Count'], aggfunc=np.sum) 
tables_df=tables_df.reset_index() 

Aber es gibt einen leeren Datenrahmen zurück.

Was mache ich falsch? Gibt es auch eine Möglichkeit, dies ohne Pivot-Tabelle in Pandas zu tun?

+0

Sie die Antwort überprüfen kann ich verbunden – Wen

Antwort

1

Ich glaube, Sie brauchen:

alerts_df = (alerts_df.groupby(['Values','State','Sort']) 
        .size() 
        .unstack(fill_value=0) 
        .reset_index() 
        .rename_axis(None, 1)) 
print (alerts_df) 
    Values State 42 45 46 
0  a Open 1 2 1 
1  b Close 1 0 0 
2  b Open 1 0 2 
3  c Open 1 2 1 
4  d Open 1 2 1 
Verwandte Themen