社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

使用python消除excel中的重复/重复现象

srish • 5 年前 • 1410 次点击  

我正在尝试删除“名称”列下的重复/重复名称。我只想通过使用python脚本来避免重复的名字。

这是我的输入excel:

input

需要这样的输出:

output

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/46666
 
1410 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Datanovice
Reply   •   1 楼
Datanovice    5 年前

这并不是说你只是在一个列中用空格填充重复的键,我会处理如下:

通过创建一个掩码,如果行是=上面的行,则返回一个true/false布尔值。

假设您的数据帧名为df

mask = df['NAME'].ne(df['NAME'].shift())

df.loc[~mask,'NAME'] = ''

说明:

我们在上面所做的是:

首先选择一个列,或者用pandas术语a系列,然后应用 .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

我们可以看到雷卡已经下楼了

把这些放在一起,

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] 它允许您通过标签或布尔数组(在本例中为数组)访问数据帧。

但是,我们只想访问错误的布尔值,所以我们使用 ~ 它颠倒了我们数组的逻辑。

    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

希望能有帮助!