这并不是说你只是在一个列中用空格填充重复的键,我会处理如下:
通过创建一个掩码,如果行是=上面的行,则返回一个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
希望能有帮助!