Michael-Fade 发表于 2021-1-5 09:39

Python利用Pandas对重复数据去重、求和问题

萌新一枚,恳请各位大佬帮忙看看,近期我想用groupby去重求和。我有一个疑问?每次到求和这一步,为什么列表会自动排序,导致后续替换数据时对应不上,请问各位这段代码哪个地方错了,要怎么优化,怎么才能实现我想要的结果,还请各位路过的大佬帮忙看下,网上找了两天了,都没找到解决办法[苦涩][苦涩][苦涩],谢谢啦!
萌新第一次发帖,请各位大佬多多包涵!
代码如下:


import pandas as pd
import numpy as np


data = {"number":,
"letter":['a','d','b','b','b','c','d','b','c','d'],
"label":,
"test":['大','测试','的','多个','归档','更改','回复','退货','好久','监控']}
dataset1 = pd.DataFrame(data) #初始化DataFrame 得到数据集dataset1


print(dataset1)


dataset = dataset1.fillna("NULL")
# print(dataset)


duplicate_row = dataset.duplicated(subset=['number','letter'],keep=False)
# print(duplicate_row)


duplicate_data = dataset.loc
print(duplicate_data)


duplicate_data_sum = duplicate_data.groupby(by=['number','letter']).agg({'label':sum}).reset_index(drop=False)
print(duplicate_data_sum)


duplicate_data_one = duplicate_data.drop_duplicates(subset=['number','letter'],keep="first").reset_index(drop=True)
print(duplicate_data_one)


no_duplicate = dataset.drop_duplicates(subset=['number','letter'] ,keep=False)
print(no_duplicate)


duplicate_data_one ['label'] = duplicate_data_sum ['label']#前面需要重置索引
print(duplicate_data_one)


Result = pd.concat()
print(Result)

Michael-Fade 发表于 2021-1-5 10:18

:'(weeqw:'(weeqw:'(weeqw:'(weeqw:'(weeqw大佬在哪里 帮帮孩子吧

nanceluck 发表于 2021-1-5 11:50

级别太低,下午来看。

sz090955 发表于 2021-1-5 12:03

dataset.groupby(["number","letter"]).sum().reset_index().merge(dataset,how="left",on=["number","letter"]).drop_duplicates(subset=['number','letter'] ,keep="first")

sz090955 发表于 2021-1-5 12:12

细节请自个儿打磨,个人觉得要解决的不是排序,而是匹配

Michael-Fade 发表于 2021-1-5 13:46

sz090955 发表于 2021-1-5 12:12
细节请自个儿打磨,个人觉得要解决的不是排序,而是匹配

好的 感谢大佬 我自己已经找到解决办法了:lol

lvcaolhx 发表于 2021-1-5 15:17

import pandas as pd
import numpy as np


data = {"number":,
"letter":['a','d','b','b','b','c','d','b','c','d'],
"label":,
"test":['大','测试','的','多个','归档','更改','回复','退货','好久','监控']}
dataset1 = pd.DataFrame(data) #初始化DataFrame 得到数据集dataset1

dataset = dataset1.fillna("NULL")
# print(dataset)


duplicate_row = dataset.duplicated(subset=['number','letter'],keep=False)
#print(duplicate_row)


duplicate_data = dataset.loc
print('\n2:',duplicate_data)

'''

    直接使用 as_index=False 参数是一个好的习惯,因为如果dataframe非常巨大(比如达到GB以上规模)时,先生成一个Groupby对象,然后再调用reset_index()会有额外的时间消耗。
    在任何涉及数据的操作中,排序都是非常"奢侈的"。如果只是单纯的分组,不关心顺序,在创建Groupby对象的时候应当关闭排序功能,因为这个功能默认是开启的。尤其当你在较大的大数据集上作业时更当注意这个问题。
    值得注意的是:groupby会按照数据在原始数据框内的顺序安排它们在每个新组内的顺序。这与是否指定排序无关。

如果要得到一个多层索引的数据框,使用默认的as_index=True即可
'''

duplicate_data_sum = duplicate_data.groupby(by=['number','letter'],as_index=False, sort=False).agg({'label':sum})#在此处能直接添加test列就更好了
print(duplicate_data_sum)


duplicate_data_one = duplicate_data.drop_duplicates(subset=['number','letter'],keep='first').reset_index(drop=True)
#print(duplicate_data_one)
#duplicate_data_one = duplicate_data.drop_duplicates(subset=['number','letter'],keep='first').reset_index(drop=True)

no_duplicate = dataset.drop_duplicates(subset=['number','letter'] ,keep=False)
#print(no_duplicate)


duplicate_data_one ['label'] = duplicate_data_sum ['label']#前面需要重置索引
print(duplicate_data_one)


Result = pd.concat()
print(Result)

Michael-Fade 发表于 2021-1-5 15:22

lvcaolhx 发表于 2021-1-5 15:17
import pandas as pd
import numpy as np



感谢大佬的指点{:1_893:}

lvcaolhx 发表于 2021-1-5 15:24

初学者,一起交流进步。
页: [1]
查看完整版本: Python利用Pandas对重复数据去重、求和问题