首页 > 解决方案 > 如何通过在同一列中使用保持参数 first 和 Last 来删除 pandas df 列中的重复值

问题描述

我有一个像下面这样的df

例如 Df

Index     a
0         1
1         1    
2         1
3         1
4         2
5         3           
6         4
7         5
8         6
9         7
10        7
11        7 
12        7

我需要什么

我想删除重复值行,以便 df.drop_duplicate (subset = 'a',keep = 'last')用于顶部重复项并df.drop_duplicate (subset = 'a',keep = 'first')用于底部重复项。如下图......

Index         a
    3         1
    4         2
    5         3           
    6         4
    7         5
    8         6
    9         7

我相信对于上述问题会有一些简单的方法。

标签: pythonpython-3.xpandas

解决方案


这是一种方法:

first = df.a.ne(df.a.shift(-1)).idxmax()
last = df.a.ne(df.a.shift(1))[::-1].idxmax()
df.loc[first:last,:]

输出

   a
3  1
4  2
5  3
6  4
7  5
8  6
9  7

细节

first并将last用于计算数据帧的起始和最终索引,以获得预期的输出。两种情况下的第一个True索引都可以使用DataFrame.idxmax

x = df.a.ne(df.a.shift(-1))
print(x)

0     False
1     False
2     False
3      True
4      True
5      True
6      True
7      True
8      True
9     False
10    False
11    False
12     True
Name: a, dtype: bool

print(x.idxmax())
# 3

对于最后一个索引:

y = df.a.ne(df.a.shift(1))[::-1]
print(y)

0     False
1     False
2     False
3      True
4      True
5      True
6      True
7      True
8      True
9     False
10    False
11    False
12     True
Name: a, dtype: bool

print(y.idxmax())
# 9

推荐阅读