好友
阅读权限20
听众
最后登录1970-1-1
|
import pandas as pd
import numpy as np
data = {"number":[1,2,1,4,4,2,2,1,2,2],
"letter":['a','d','b','b','b','c','d','b','c','d'],
"label":[1,5,1,9,9,2,2,1,2,9],
"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[duplicate_row,:]
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([no_duplicate,duplicate_data_one])
print(Result)
|
|