2017-07-18 1 views
1

複数のgroupby出力を比較する方法は何でしょうか。異なるデータフレームのgroupby出力の比較

>>> 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 

の下に、私は

>>>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 

を行うように私は、異なるデータフレームから複数のGROUPBY出力を持っているが、最大合計バランスのDFを見つける方法はあります。例えば。この場合、tmp2の合計は(70+110 < 500+300)となります。

私の試み: 私が試した方法の一つは、和をとるなど

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] 

の下に、リストを維持した今、私は、リストから最大を取ることができますが、私は緩いアカウント情報(800が最大であるが、私は辞書を持っているすべてのDFのために、私はちょうどこのようなリストの最大値を見つける必要があるので、

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

を試してみました500、B 300)

を持つアカウントに情報が必要私はあなたが2つの以上のDFSを持っている場合には、私は、正しくあなたを理解していれば(アカウントと一緒に)最大合計

答えて

1

を持っていたデータフレームを見つけるつもり

(私はそれを解決するために非常に近くなってきたと思います)。

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)] 

結果:

acount balance 
A  300 
B  700 
+0

これは私のためにそれを行います!コマンドにメモを付けることができますか – pythonRcpp

関連する問題