Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas 如何对具有重复Key1 Key2对的记录的数据字段求和,并以具有唯一Key1 Key2对的记录结束_Pandas_Dataframe_Sum_Duplicates_Key - Fatal编程技术网

Pandas 如何对具有重复Key1 Key2对的记录的数据字段求和,并以具有唯一Key1 Key2对的记录结束

Pandas 如何对具有重复Key1 Key2对的记录的数据字段求和,并以具有唯一Key1 Key2对的记录结束,pandas,dataframe,sum,duplicates,key,Pandas,Dataframe,Sum,Duplicates,Key,给定一个数据帧,该数据帧具有重复的key1和key2对,但不一定是相同的数据,且记录数不确定。(即,键1和键2的组合是非唯一的。) 我需要为复制的记录添加相应的数据列,并最终得到具有唯一key1和key2值的记录。 我在网上搜索过,但我能找到的只是关于删除重复记录的帖子,我没有重复记录,我有重复键1和键2对的记录 下面的代码应该可以简化并说明我要查找的内容: import pandas as pd data={'key1':[1,2,3,1,2,3,2,2],'key2':[2,2,1,2,2

给定一个数据帧,该数据帧具有重复的key1和key2对,但不一定是相同的数据,且记录数不确定。(即,键1和键2的组合是非唯一的。) 我需要为复制的记录添加相应的数据列,并最终得到具有唯一key1和key2值的记录。 我在网上搜索过,但我能找到的只是关于删除重复记录的帖子,我没有重复记录,我有重复键1和键2对的记录

下面的代码应该可以简化并说明我要查找的内容:

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具有重复的键1和键2对“2”和“2”

我需要以以下内容结束:(所有键1和键2对都是唯一的,数据汇总)


正如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
不需要使用参数
作为_index=False进行聚合的解决方案-
重置_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

frame.groupby(['key1','key2'])['data'].sum().reset_index()
哇,这真是一件艺术品!我最终使用了:frame=frame.groupby(['key1','key2'])['data'].sum().reset_index()谢谢,但是你的示例看起来比我的更干净,所以我最终保留了.reset_index()@MikeF。-这取决于你。这两种解决方案都非常有效。天气真好!
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