2016-10-10 58 views
2

給定具有未指定數量記錄且具有重複密鑰1的數據幀& key2對,但不一定相同數據。 (即,Key1和Key2的組合是非唯一的。) 我需要爲重複記錄添加各自的數據列,並最終獲得具有唯一key1 & key2值的記錄。 我在網上搜索,但我能找到的所有帖子都是關於刪除重複記錄的帖子,而且我沒有重複的記錄,我有記錄有重複的key1 & key2對。如何爲具有重複Key1 Key2對的記錄計算數據字段的總和,並以具有唯一Key1 Key2對的記錄結尾

下面的代碼應該簡化和說明我正在尋找:

import pandas as pd 

data={'key1':[1,2,3,1,2,3,2,2],'key2':[2,2,1,2,2,4,2,2],'data':[5,6,2,6,1,6,2,8]} 

frame=pd.DataFrame(data,columns=['key1','key2','data']) 

print frame 

    key1 key2 data 

0  1  2  5 

1  2  2  6 

2  3  1  2 

3  1  2  6 

4  2  2  1 

5  3  4  6 

6  2  2  2 

7  2  2  8 

記錄0和3有重複鍵1和鍵2對「1」 &「2」

記錄1,4 ,圖6和7有重複的KEY1和KEY2對「2」 &「2」

我需要與下列落得:(所有KEY1 &密鑰2對獨特,數據求和)

 key1 key2 data 
0  1  2 11  (11 = 5+6, sum of data from Records 0 and 3) 

1  2  2  17 (17 = 6+1+2+8, sum of data from Records 1, 4, 6, and 7) 

2  3  1  2 

3  3  4  6 
+0

' frame.groupby(['key1','key2'])['data']。sum()。reset_index()' – MaxU

+0

哇,現在這是一件藝術品!我結束了使用: frame = frame.groupby(['key1','key2'])['data']。sum()。reset_index() –

回答

1

爲MaxU說,你可以使用groupby然後sum()方法,例如有:

frame.groupby(['key1', 'key2'])['data'].sum().reset_index() 
Out[12]: 
    key1 key2 data 
0  1  2 11 
1  2  2 17 
2  3  1  2 
3  3  4  6 
0

解決方案與參數as_index=False聚集sum - reset_index是沒有必要的:

print (frame.groupby(['key1', 'key2'], as_index=False)['data'].sum()) 
    key1 key2 data 
0  1  2 11 
1  2  2 17 
2  3  1  2 
3  3  4  6 
+0

謝謝,但你的例子看起來比我的要乾淨,所以我結束了保持.reset_index() –

+0

@MikeF。 - 它是由你決定。這兩種解決方案完美地工美好的一天! – jezrael

相關問題