Python 我如何删除重复项并保留第一个值?
我想删除重复项并保留第一个值。要删除的重复项是A='df'。这是我的数据Python 我如何删除重复项并保留第一个值?,python,pandas,dataframe,Python,Pandas,Dataframe,我想删除重复项并保留第一个值。要删除的重复项是A='df'。这是我的数据 A B C D E qw 1 3 1 1 er 2 4 2 6 ew 4 8 44 4 df 34 34 34 34 df 2 5 2 2 df 3 3 7 3 df 4 4 7 4 we 2 5 5 2 we 4 4 4 4 df 34 9 34 34 df 3 3 9
A B C D E
qw 1 3 1 1
er 2 4 2 6
ew 4 8 44 4
df 34 34 34 34
df 2 5 2 2
df 3 3 7 3
df 4 4 7 4
we 2 5 5 2
we 4 4 4 4
df 34 9 34 34
df 3 3 9 3
we 4 7 4 4
qw 2 2 7 2
因此,结果将是
A B C D E
qw 1 3 1 1
er 2 4 2 6
ew 4 8 44 4
**df** 34 34 34 34
we 2 5 5 2
we 4 4 4 4
**df** 34 9 34 34
we 4 7 4 4
qw 2 2 7 2
创建帮助程序
系列
以区分A
列中的连续值,然后使用倒置的(~)
布尔掩码进行过滤,该掩码由另一个掩码链接而成,用于比较值df
:
s = df['A'].ne(df['A'].shift()).cumsum()
df = df[~((df['A'] == 'df') & (s.duplicated()))]
print (df)
A B C D E
0 qw 1 3 1 1
1 er 2 4 2 6
2 ew 4 8 44 4
3 df 34 34 34 34
7 we 2 5 5 2
8 we 4 4 4 4
9 df 34 9 34 34
11 we 4 7 4 4
12 qw 2 2 7 2
创建帮助程序
系列
以区分A
列中的连续值,然后使用倒置的(~)
布尔掩码进行过滤,该掩码由另一个掩码链接而成,用于比较值df
:
s = df['A'].ne(df['A'].shift()).cumsum()
df = df[~((df['A'] == 'df') & (s.duplicated()))]
print (df)
A B C D E
0 qw 1 3 1 1
1 er 2 4 2 6
2 ew 4 8 44 4
3 df 34 34 34 34
7 we 2 5 5 2
8 we 4 4 4 4
9 df 34 9 34 34
11 we 4 7 4 4
12 qw 2 2 7 2
使用cumcount()
df看起来像:
In [6]: df
Out[6]:
A B C D E cum
0 qw 1 3 1 1 0
1 er 2 4 2 6 0
2 ew 4 8 44 4 0
3 df 34 34 34 34 0
4 df 2 5 2 2 1
5 df 3 3 7 3 2
6 df 4 4 7 4 3
7 we 2 5 5 2 0
8 we 4 4 4 4 1
9 df 34 9 34 34 4
10 df 3 3 9 3 5
11 we 4 7 4 4 2
12 qw 2 2 7 2 1
np.diff
In [7]: df['cum2'] = np.append([0],np.diff(df.cum))
In [8]: df
Out[8]:
A B C D E cum cum2
0 qw 1 3 1 1 0 0
1 er 2 4 2 6 0 0
2 ew 4 8 44 4 0 0
3 df 34 34 34 34 0 0
4 df 2 5 2 2 1 1
5 df 3 3 7 3 2 1
6 df 4 4 7 4 3 1
7 we 2 5 5 2 0 -3
8 we 4 4 4 4 1 1
9 df 34 9 34 34 4 3
10 df 3 3 9 3 5 1
11 we 4 7 4 4 2 -3
12 qw 2 2 7 2 1 -1
输出
In [12]: df.query("~((A == 'df') & (cum2 == 1))").drop(['cum','cum2'],axis=1)
Out[12]:
A B C D E
0 qw 1 3 1 1
1 er 2 4 2 6
2 ew 4 8 44 4
3 df 34 34 34 34
7 we 2 5 5 2
8 we 4 4 4 4
9 df 34 9 34 34
11 we 4 7 4 4
12 qw 2 2 7 2
参考:使用cumcount()
df看起来像:
In [6]: df
Out[6]:
A B C D E cum
0 qw 1 3 1 1 0
1 er 2 4 2 6 0
2 ew 4 8 44 4 0
3 df 34 34 34 34 0
4 df 2 5 2 2 1
5 df 3 3 7 3 2
6 df 4 4 7 4 3
7 we 2 5 5 2 0
8 we 4 4 4 4 1
9 df 34 9 34 34 4
10 df 3 3 9 3 5
11 we 4 7 4 4 2
12 qw 2 2 7 2 1
np.diff
In [7]: df['cum2'] = np.append([0],np.diff(df.cum))
In [8]: df
Out[8]:
A B C D E cum cum2
0 qw 1 3 1 1 0 0
1 er 2 4 2 6 0 0
2 ew 4 8 44 4 0 0
3 df 34 34 34 34 0 0
4 df 2 5 2 2 1 1
5 df 3 3 7 3 2 1
6 df 4 4 7 4 3 1
7 we 2 5 5 2 0 -3
8 we 4 4 4 4 1 1
9 df 34 9 34 34 4 3
10 df 3 3 9 3 5 1
11 we 4 7 4 4 2 -3
12 qw 2 2 7 2 1 -1
输出
In [12]: df.query("~((A == 'df') & (cum2 == 1))").drop(['cum','cum2'],axis=1)
Out[12]:
A B C D E
0 qw 1 3 1 1
1 er 2 4 2 6
2 ew 4 8 44 4
3 df 34 34 34 34
7 we 2 5 5 2
8 we 4 4 4 4
9 df 34 9 34 34
11 we 4 7 4 4
12 qw 2 2 7 2
参考资料:另一个想法,在我看来更具可读性的好处是,只移动
df.A==“df”
处的索引,并将ID存储在差异等于1的位置。我们使用df.drop()
删除这些列
另一个想法是,在我看来更具可读性的好处是,只移动
df.A==“df”
处的索引,并将ID存储在差异等于1的位置。我们使用df.drop()
删除这些列
您好,我的问题只是顺序行和重复行,请从另一行中删除第一行@aditya如果在问题中添加您尝试的内容和代码,您可以防止否决票。如果出现一些错误,没有问题,但也可以将其添加到问题中。您好,我的问题只是连续的和重复的行,请从其他行中删除第一行@aditya如果将您尝试的内容和代码添加到问题中,您可以防止否决票。如果有一些错误,没问题,但是把它也添加到问题中。一如既往的好!你觉得我的解决方案怎么样?:)@AntonvBR-有点不合时宜,但看起来不错。只有必要的唯一索引值:)一如既往地好!你觉得我的解决方案怎么样?:)@AntonvBR-有点不合时宜,但看起来不错。仅需要唯一索引值:)