excel - 使用python删除excel中的重复/重复出现
解决方案
这并不是说您只是将一列中的重复键填充为空白,而是删除重复项,我将按如下方式处理:
通过创建一个掩码,如果该行是 == 上面的行,则返回一个真/假布尔值。
假设您的数据框称为 df
mask = df['NAME'].ne(df['NAME'].shift())
df.loc[~mask,'NAME'] = ''
解释 :
我们在上面做的是以下,
首先选择一个列,或者在熊猫术语中是一个系列,然后我们应用一个.ne
(不等于)实际上是!=
让我们看看这个在行动。
import pandas as pd
import numpy as np
# create data for dataframe
names = ['Rekha', 'Rekha','Jaya','Jaya','Sushma','Nita','Nita','Nita']
defaults = ['','','c-default','','','c-default','','']
classes = ['forth','third','foruth','fifth','fourth','third','fifth','fourth']
现在,让我们创建一个类似于您的数据框。
df = pd.DataFrame({'NAME' : names,
'DEFAULT' : defaults,
'CLASS' : classes,
'AGE' : [np.random.randint(1,5) for len in names],
'GROUP' : [np.random.randint(1,5) for len in names]}) # being lazy with your age and group variables.
所以,如果我们这样做,我们会得到df['NAME'].ne('Omar')
相同的结果。[df['NAME'] != 'Omar']
0 True
1 True
2 True
3 True
4 True
5 True
6 True
7 True
所以,除此之外,我们想看看第 1 行中的名称(记住 python 是一种 0 索引语言,所以第 1 行实际上是第 2 个物理行)是否.eq
在上面的行中。
我们通过调用[.shift][2]
超链接来获取更多信息。
这基本上做的是用定义的变量编号通过其索引移动行,让我们称之为n。
如果我们打电话df['NAME'].shift(1)
0 NaN
1 Rekha
2 Rekha
3 Jaya
4 Jaya
5 Sushma
6 Nita
7 Nita
我们可以在这里看到 Rekha 已经下移了
所以把所有这些放在一起,
df['NAME'].ne(df['NAME'].shift())
0 True
1 False
2 True
3 False
4 True
5 True
6 False
7 False
我们将它分配给一个名为的自定义变量,mask
您可以随意调用它。
然后我们使用[.loc][2]
它允许您通过标签或布尔数组(在本例中为数组)访问您的数据框。
但是,我们只想访问为 False 的布尔值,因此我们使用 a~
来反转数组的逻辑。
NAME DEFAULT CLASS AGE GROUP
1 Rekha third 1 4
3 Jaya fifth 1 1
6 Nita fifth 1 2
7 Nita fourth 1 4
我们现在需要做的就是将这些行更改为空白作为您的初始要求,我们就剩下了。
NAME DEFAULT CLASS AGE GROUP
0 Rekha forth 2 2
1 third 1 4
2 Jaya c-default forth 3 3
3 fifth 1 1
4 Sushma fourth3 1
5 Nita c-default third 4 2
6 fifth 1 2
7 fourth1 4
希望有帮助!