2017-07-18 2 views
1

Was könnte eine Möglichkeit sein, mehrere groupby Ausgänge zu vergleichen.Vergleichen groupby Ausgabe für verschiedene Datenrahmen

habe ich mehrere groupby Ausgänge von verschiedenen Datenrahmen, wie unten

>>> tmp1 
    account place balance type 
0  A A1  10 B1 
1  A A1  20 B1 
2  A A1  30 B1 
3  A A1  10 B4 
4  A A1  20 B4 
5  A A1  10 B5 
6  A A1  10 B6 
7  B A2  10 B7 
8  B A2  20 B1 
9  B A2  100 B1 

ich

>>>tmp1.groupby(['account','place','type']['balance'].last().sum(level=0).astype(int) 
    account 
    A  70 
    B  110 
    Name: balance, dtype: int64 

Similarly 
>>> tmp2 
    account place balance type 
0  A A1  100 B1 
1  A A1  200 B1 
2  A A1  100 B1 
3  A A1  100 B4 
4  A A1  200 B4 
5  A A1  100 B5 
6  A A1  100 B6 
7  B A2  100 B7 
8  B A2  200 B1 
9  B A2  200 B1 


    >>>tmp2.groupby(['account','place','type']['balance'].last().sum(level=0).astype(int) 
    account 
    A  500 
    B  300 
    Name: balance, dtype: int64 

    #similarly tmp3 grouped..and so on 

Gibt es eine Möglichkeit, die df mit maximaler Summe Balance zu finden. z.B. In diesem Fall hat tmp2 eine höhere Summe (70+110 < 500+300).

Mein Versuch: Eine der Möglichkeiten, wie ich versucht, die Summe nahm und eine Liste beibehalten wird, wie unten

mylist=[] 
mylist.append(tmp1.groupby(['account','place','type']['balance'].last().sum(.astype(int)) 
mylist.append(tmp2.groupby(['account','place','type']['balance'].last().sum(.astype(int)) 
>>> mylist 
[180,800] 

Jetzt kann ich max von der Liste nehmen, aber ich verlieren Kontoinformationen (800 max aber I Informationen benötigen wegen A mit 500, B 300 mit)

ich versuchte

>>>tmp2.groupby(['account','place','type'])['balance'].last().sum(level=0).to_dict() 
{'A': 500, 'B': 300} 

so wird für jeden df ich ein dict haben, ich brauche nur maximal zu finden solcher Listen (Ich glaube, ich habe sehr nahe kommen, um es zu lösen)

Ich beabsichtige, um herauszufinden, welche Datenrahmen maximale Summe hatte (zusammen mit Account)

Antwort

1

Wenn ich Sie richtig verstehe, falls Sie mehr als 2 dfs haben.

tmp1 = pd.DataFrame([{'acount':'A', 'balance':100, 'type':'A1'}, 
       {'acount':'A', 'balance':200, 'type':'A2'}, 
       {'acount':'B', 'balance':200, 'type':'B1'}, 
       {'acount':'B', 'balance':300, 'type':'B2'}]) 
tmp2 = pd.DataFrame([{'acount':'A', 'balance':100, 'type':'A1'}, 
       {'acount':'A', 'balance':200, 'type':'A2'}, 
       {'acount':'B', 'balance':400, 'type':'B1'}, 
       {'acount':'B', 'balance':300, 'type':'B2'}]) 
tmplist = [tmp1,tmp2] 
tmprlist = [tmp.groupby(['acount','type']).last().sum(level=0).astype(int) for tmp in tmplist] 
tmpslist = [tmp.groupby(['acount','type'])['balance'].last().sum() for tmp in tmplist] 
tmprlist[np.argmax(tmpslist)] 

Ergebnis:

acount balance 
A  300 
B  700 
+0

dies macht es für mich! Könntest du den Befehlen Notizen hinzufügen? – pythonRcpp

Verwandte Themen