Python 我如何删除重复项并保留第一个值?

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='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   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-有点不合时宜,但看起来不错。仅需要唯一索引值:)