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)
:'(weeqw:'(weeqw:'(weeqw:'(weeqw:'(weeqw大佬在哪里 帮帮孩子吧 级别太低,下午来看。 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
细节请自个儿打磨,个人觉得要解决的不是排序,而是匹配
好的 感谢大佬 我自己已经找到解决办法了:lol 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)
lvcaolhx 发表于 2021-1-5 15:17
import pandas as pd
import numpy as np
感谢大佬的指点{:1_893:} 初学者,一起交流进步。
页:
[1]