python - 如何通过在同一列中使用保持参数 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
我相信对于上述问题会有一些简单的方法。
解决方案
这是一种方法:
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
推荐阅读
- xquery - 根据管道分隔符拆分字符串,但括号内的 () 除外
- javascript - 电容器javascript新文件字节显示而不是文件名
- python - openCV多边形检测
- vue.js - 如何在选择表单中使用 v-model?
- r - 如何将数据尾部排除在 ggplot2 中数据点大小的影响因素中(使用 scale_size 或类似的东西)?
- c# - 我怎样才能使我的 Raycast2D 引用它击中的每个对象?
- python - Python 最后一个字符 zeo 或一次
- python - 外星人行没有打印
- href - 在我的网站上单击图片时锚链接不起作用
- .net - 如何让 Windows 10 检测到我安装的所有文字转语音?