2017-10-04 7 views
1

나는 다음과 같은 데이터를 가지고 :GROUPBY과 합

import pandas as pd 
x4 = pd.DataFrame({"ID": [101,101, 102, 103, 104, 105], 
        "Prob": [1, 1,1, 1, 1, 1], 
        "Ef": [0,2, 0, 0, 0.25, 0.29], 
        "W": [2, 2,3, 4, 5, 6], 
        "EC": [0, 0,0, 0, 1.6, 2], 
        "Rand": [11, 12,12, 13, 14, 15]}) 

난으로 만 열 ID 열을 유지 한 후 sum(Prob * Ef)by ID을 얻을 좋아하고 것 sum, EC 열 및 W 열. 나는이 시도

  ID sum_column EC  W 
1:   101 2.00  0.0  2 
2:   101 2.00  0.0  2 
3:   102 0.00  0.0  3 
4:   103 0.00  0.0  4 
5:   104 0.25  1.6  5 
6:   105 0.29  2.0  6 

:

그래서 결국 나는이 갖고 싶어 x4.loc[:, ['EC','W','ID','Prob','Ef']].groupby('ID').sum(Prob*Ef)

을하지만 곱한 열을 기준으로

답변

2

사용 GroupBy.transform 작동하지 않습니다

x4['sum_column'] = x4['Prob'].mul(x4['Ef']).groupby(x4['ID']).transform('sum') 
x4 = x4.drop(['Ef','Prob', 'Rand'], axis=1) 
print (x4) 
    ID W EC sum_column 
0 101 2 0.0  2.00 
1 101 2 0.0  2.00 
2 102 3 0.0  0.00 
3 103 4 0.0  0.00 
4 104 5 1.6  0.25 
5 105 6 2.0  0.29 

열의 순서가 중요한 경우 insert :

x4.insert(1, 'sum_column', x4['Prob'].mul(x4['Ef']).groupby(x4['ID']).transform('sum')) 
x4 = x4.drop(['Ef','Prob', 'Rand'], axis=1) 
print (x4) 
    ID sum_column W EC 
0 101  2.00 2 0.0 
1 101  2.00 2 0.0 
2 102  0.00 3 0.0 
3 103  0.00 4 0.0 
4 104  0.25 5 1.6 
5 105  0.29 6 2.0 
+0

작동합니다. 내 정보로'sum (Prob * Ef)'대신'sum (Prob/Ef)'또는'sum (Prob-Ef)'또는'sum (Prob + Ef)'연산자가'mult 그거야? – quant

+1

예,'div','sub','add'를 사용하십시오. – jezrael