2017-04-24 6 views
0

I Listen dieses Format haben:Merge und aggregieren Listeneinträge mit Pandas, ohne Entfernen von Feldern

['bear', 'brown', 'mammal', 1233], 
['cat', 'black', 'mammal', 1533], 
['bear', 'brown', 'mammal', 2345], 
['bear', 'black', 'mammal', 2345] 

Ich möchte die Zahlen am Ende aggregieren, wenn die ersten drei Saiten identisch sind, und entfernen Sie den doppelten Eintrag . So dass:

['bear', 'brown', 'mammal', 3578], 
['cat', 'black', 'mammal', 1533], 
['bear', 'black', 'mammal', 2345] 

Ich weiß, wie .groupby([0]) mit Pandas aber, dass in der Regel alle Spalten löschen, die nicht gruppiert.

Antwort

2
import pandas as pd 
#add data to a dataframe 
df = pd.DataFrame(columns=['A','B','C','D'], 
        data = [['bear', 'brown', 'mammal', 1233], 
         ['cat', 'black', 'mammal', 1533], 
         ['bear', 'brown', 'mammal', 2345], 
         ['bear', 'black', 'mammal', 2345]]) 
#group the dataframe and sum the last column  
df.groupby(by=['A','B','C']).sum().reset_index().values.tolist() 
3
In [137]: pd.DataFrame(d).groupby([0,1,2]).sum().reset_index().values.tolist() 
Out[137]: 
[['bear', 'black', 'mammal', 2345], 
['bear', 'brown', 'mammal', 3578], 
['cat', 'black', 'mammal', 1533]] 

wo d ist eine Liste:

In [138]: d 
Out[138]: 
[['bear', 'brown', 'mammal', 1233], 
['cat', 'black', 'mammal', 1533], 
['bear', 'brown', 'mammal', 2345], 
['bear', 'black', 'mammal', 2345]] 
3

Stellen Sie sicher, Sie Ihre Liste in einen Datenrahmen

df = pd.DataFrame([ 
     ['bear', 'brown', 'mammal', 1233], 
     ['cat', 'black', 'mammal', 1533], 
     ['bear', 'brown', 'mammal', 2345], 
     ['bear', 'black', 'mammal', 2345] 
    ]) 

Verwenden erhalten groupby + sum

df.groupby([0, 1, 2])[3].sum().reset_index() 


     0  1  2  3 
0 bear black mammal 2345 
1 bear brown mammal 3578 
2 cat black mammal 1533 

Um Ihre Liste zurück zu bekommen ... Siehe @ MaxU's Antwort.