2016-10-10 56 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

相关问题