python - 基于多列删除重复项
问题描述
我想创建一个子集,其中删除了具有 3 个或更多相同列的数据,但保留了原始数据。我有 4 列 ['col1', 'col2', 'col3', 'col4'],并编写了下一个代码:
df1 = data_between_all.drop_duplicates(['col1', 'col2', 'col3']).copy()
df2 = data_between_all.drop_duplicates(['col1', 'col3', 'col4']).copy()
df3 = data_between_all.drop_duplicates(['col1', 'col2', 'col4']).copy()
df4 = data_between_all.drop_duplicates(['col2', 'col3', 'col4']).copy()
data_without_duplicates = df1.append([df2, df3, df4]).drop_duplicates()
有没有最复杂的方法来做到这一点?
解决方案
您可以使用一个简单的循环在每次迭代中排除一列:
设置一个最小的可重现示例
df = pd.DataFrame(np.random.randint(0, 2, (10, 4)),
columns=['col1', 'col2', 'col3', 'col4'])
print(df)
样本数据:
>>> df
col1 col2 col3 col4
0 1 1 1 1
1 1 1 1 1
2 0 0 0 1
3 0 1 1 0
4 1 0 0 0
5 1 1 0 1
6 0 0 1 0
7 0 1 0 0
8 0 0 0 0
9 1 0 1 0
data = []
for col in df.columns:
data.append(df.drop_duplicates(df.columns[df.columns != col]))
out = pd.concat(data).drop_duplicates()
输出结果:
>>> out
col1 col2 col3 col4
0 1 1 1 1
2 0 0 0 1
3 0 1 1 0
4 1 0 0 0
5 1 1 0 1
6 0 0 1 0
7 0 1 0 0
9 1 0 1 0
推荐阅读
- android - CoordintatorLayout - AppBar 和 Layout 中的可滚动内容
- c# - 如何在实体框架中有效地进行级联删除
- angular - 如何在使用 ng2-chart 构建的散点图中标记点
- python - 我创建的页面立即打开和关闭
- react-native - 在 react-native 中导航到 Web 视图
- windows - 如何在 Windows 上使用 Gstreamer 获取来自 UVC 的编码流
- angular - 如何添加到 Angular Firestore 中的数组?
- mysql - 提高 mysql 上的 sql 查询性能
- javascript - 缩小数组变量的声明
- java - Selenium / Java - 获取整页截图