python - 删除熊猫中两列中包含的重复项
问题描述
我有一个包含两列的数据框。我想删除行,这样,对于每一行,它在第一列中只包含一个实例,但在第二列中包含所有唯一值。
这是一个例子:
data = [[1,100],
[1,101],
[1,102],
[1,103],
[2,102],
[2,104],
[2,105],
[3,102],
[3,107]]
df = pd.DataFrame(data,columns = ['x', 'y'])
数据框如下所示:
x y
0 1 100
1 1 101
2 1 102
3 1 103
4 2 102
5 2 104
6 2 105
7 3 102
8 3 107
输出数据框如下所示:
x y inc
0 1 100 1
1 1 101 0
2 1 102 0
3 1 103 0
4 2 102 1
5 2 104 0
6 2 105 0
7 3 102 0
8 3 107 1
因此第 0 行将被包括(inc),因为第 x 列中尚未复制 1。第 1-3 行将被排除,因为 x 列中的 1 已经被考虑在内。将包括第 4 行,因为 x 列中的 2 尚未包括在内,并且 y 列 (102) 尚未包括在内(它作为重复项被排除在外)。在第 7 行,第 x 列中的 3 的第一个实例将被排除,因为第 4 行中已经考虑了 102(在 y 列中)。因此,我们将跳到第 8 行并包含它。
我尝试了多种.duplicated
方法,但到目前为止没有一种方法奏效。如果您只取 x 列中某个值的第一个实例,您将排除应包含的行(例如第 7 行)。
任何帮助,将不胜感激。
解决方案
我相信您只会使用drop_duplicates
其中的一个子集'x'
并指定'first'
将保留哪些行。
df.drop_duplicates(keep='first', subset = 'x')
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.drop_duplicates.html
推荐阅读
- bitbucket - 将非常长的命令的输出存储在 bitbucket-pipelines.yml 中的变量多行中
- cuda - 使用推力/cuda 减少矢量子集的有效方法
- mysql - 参数 1 中的 JSON 文本无效 - MySQL 5.7.8 中的 json_contains
- arrays - 在 foreach 循环外打印数组
- c# - 如何在 aspx 页面的 CommandName 属性中传递 ac# 变量
- html - 如何从这个生成的表中提取一列?
- java - 创建文件 CentO
- python - wxpython中如何动态替换菜单栏?
- python - 用于比较 du 和 df 控制台输出的 Python 脚本
- c# - 如何使表用作计数器的行锁?