什么是最毕达通的方式,以放弃唯一的第一个,在一系列的重复?
我有个数据:
Group Value
a 0
a 1
a 2
b 6
b 7
b 8我希望得到以下结果:
Group Value
a 1
a 2
b 7
b 8drop_duplicates根据设置的方式保留第一个或最后一个项。我想删除第一次出现的地方有一个重复,并保留其余的。
发布于 2018-01-05 18:52:46
使用duplicated()创建布尔掩码并在此基础上进行筛选:
df[df.Group.duplicated()]
#Group Value
#1 a 1
#2 a 2
#4 b 7
#5 b 8默认情况下,duplicated掩码重复,除非第一次出现为True:
df.Group.duplicated()
#0 False
#1 True
#2 True
#3 False
#4 True
#5 True
#Name: Group, dtype: bool为了保持每组边缘情况下的一行(不再那么有效):
df[df.Group.duplicated() | df.Group.groupby(df.Group).transform('count').eq(1)]
# Group Value
#1 a 1
#2 a 2
#4 b 7
#5 b 8或者:
df[df.Group.groupby(df.Group).transform(lambda x: (x.size == 1) | x.duplicated())]
# Group Value
#1 a 1
#2 a 2
#4 b 7
#5 b 8发布于 2018-01-05 18:56:26
If it is unique row , you want to keep it
df.groupby('Group').Value.apply(lambda x : x.iloc[1:] if len(x)>1 else x).reset_index('Group')
Out[144]:
Group Value
1 a 1
2 a 2
4 b 7
5 b 8
6 c 11数据输入
df
Out[138]:
Group Value
0 a 0
1 a 1
2 a 2
3 b 6
4 b 7
5 b 8
6 c 11发布于 2018-01-05 19:13:28
查找第一行的索引,并使用drop删除它。谢谢温在回答中给出的通知,我们应该保留没有重复的行,我从他/她的方法中学习选择有重复的组。
grouped = df.reset_index().groupby("Group")["index", "Value"]
first_rows = grouped.apply(lambda x: x.iloc[0] if len(x) > 1 else None).dropna()
index_first_rows = first_rows["index"]
df.drop(index_first_rows, axis="index")https://stackoverflow.com/questions/48119592
复制相似问题