2017-12-21 4 views
2

Also ich habe dieses Pandas DataFrame, mit 5 Spalten und 100000 Zeilen. Hier ist Beispiel:Wie füge ich Beobachtungen in einem Pandas DataFrame zusammen, wo alle bis auf eine Spalte gleich sind?

V1  V2   V3   V4 V5 
0 2014 Alfa Romeo 159   1 157 
1 2014 Alfa Romeo GIULIETTA 1 119 
2 2014 Alfa Romeo GIULIETTA 3 119 

Was ich tun möchte, ist Werte in Spalte V4 summieren IF Werte in V1, V2, V3 und V5 sind genau die gleichen.

V1  V2   V3   V4 V5 
0 2014 Alfa Romeo 159   1 157 
1 2014 Alfa Romeo GIULIETTA 4 119 

Zuerst dachte ich, dass groupby die Arbeit machen würde, aber wenn ich

tat
df.groupby(['V1', V2','V3', 'V5' ]).sum() 

ich einige der Informationen in der Spalte verloren V3 zum Beispiel sollte ich 10 verschiedene Arten von Farben haben aber jetzt habe ich nur 3. Wie löst man das?

+0

'verloren einige der Informationen in Spalte V3' Können Sie das näher erläutern? –

+0

Hat 'df.groupby (['V1', 'V2', 'V3', 'V5']). V4.sum(). Reset_index(). Reindex (Spalten = df.columns)' Arbeit für Sie? –

+0

verloren einige der Informationen in Spalte V3 Können Sie das näher erläutern? - cᴏʟᴅsᴘᴇᴇᴅ Sicher. In meiner Datenbank habe ich wie 10 Arten für Volvo (V3 Spalte): XC60 V60 V40 XC70 S60 S80 V70 V40 CROSS COUNTRY 13 XC90 10 V60 HYBRID 1 und nachdem ich df machen. groupby (['V1', 'V2', 'V3', 'V5']). agg (["sum"]) Es zeigt, dass es nur V70, XC60, XC70, XC90 gibt. Ist das ein Fehler in Pandas? Was denken Sie? – MikolajM

Antwort

3

Ich vermute, Sie haben mit fehlenden Daten in den Spalten 'V1', 'V2', 'V3' oder 'V5' zu tun, und diese Daten werden in groupby's weggelassen.

Eine Abhilfe dieses SO Post sehen ist fillna() zu verwenden:

df.fillna("Missing").groupby(['V1','V2','V3','V5']).V4.sum() 

Beispiel:

print (df)

 V1   V2   V3 V4 V5 
0 2014.0 Alfa Romeo  159 1 157 
1 2014.0 Alfa Romeo GIULIETTA 1 119 
2 2014.0 Alfa Romeo GIULIETTA 3 119 
3  NaN Alfa Romeo  Black 4 119 

df.groupby(['V1','V2','V3','V5']).V4.sum() 

fehlt 'Black':

V1  V2   V3   V5 
2014.0 Alfa Romeo 159  157 1 
        GIULIETTA 119 4 
Name: V4, dtype: int64 

Verwenden von filln a):

df.fillna("Missing").groupby(['V1','V2','V3','V5']).V4.sum() 

V1  V2   V3   V5 
2014.0 Alfa Romeo 159  157 1 
        GIULIETTA 119 4 
Missing Alfa Romeo Black  119 4 
Name: V4, dtype: int64 
Verwandte Themen