python - 如何删除一行中的重复值?
问题描述
我有一个包含数千行的数据框;在每一行中,一些值是重复的。我正在寻找删除这些重复项并仅保留唯一值。
为了说明,这是原始数据:
Column 1 Column 2 Column 3
0 A B A
1 D C C
2 E E E
3 F G H
进入:
Column 1 Column 2 Column 3
0 A B
1 D C
2 E
3 F G H
我尝试过应用 df.drop_duplicates 但它会在列而不是行之间删除重复值。
解决方案
您可以逐行应用 drop_duplicates:
df.apply(lambda x: x.drop_duplicates(), axis=1)
Column_1 Column_2 Column_3
0 A B NaN
1 D C NaN
2 E NaN NaN
3 F G H
编辑:
根据 DeepSpace 的建议,我做了一些计时,看看应用 pd.Series.drop_duplicates 是否比使用 lambda 更快。
df = pd.DataFrame({'Column_1':np.random.randint(1,10,10**4),
'Column_2':np.random.randint(1,10,10**4),
'Column_3':np.random.randint(1,10,10**4)})
%timeit df.apply(lambda x: x.drop_duplicates(), axis=1)
435 ms ± 8.24 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%timeit df.apply(pd.Series.drop_duplicates, axis=1)
443 ms ± 15.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
不幸的是,这两种解决方案都相当慢(1000 行已经需要半秒)。
推荐阅读
- google-sheets - 排序范围忽略谷歌表格上空白的“”风格
- database - SQLite 函数插入日期 YYYY-MM-DD 而不是 YYYYMMDD
- php - 如果在函数之前已经定义了变量,我该如何修复 php 未定义的变量?
- java - Сannot 从 NamedParameterJdbcTemplate 获取 Float 数据类型
- c - 如何为您的程序设置内存上限
- javascript - javascript 检查字符串是否以某些字符开头并删除这些字符
- java - 我的应用程序在构建项目 Android Studio 期间崩溃且没有错误
- ansible - Ansible:在单个命令中将多个文件从多个源复制到多个目标
- c# - 将控制器添加到 .Net Core 3.1 的 Razor 组件库
- python - Django:如何显示数据库中的登录用户数据