You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于多条件移除重复行:DataFrame层级去重需求

没问题,我来帮你搞定这个层级去重的需求!咱们可以用Pandas分几步来实现,逻辑非常清晰:

解决方案步骤

1. 筛选并保留所有含有效数据(非零)的行

首先,我们要把所有至少有一列是非零值的行筛选出来——这些是你需要的有效数据行,不管它们有没有重复,都直接保留。用df.any(axis=1)可以快速判断每一行是否存在非零值:

import pandas as pd

# 假设你的DataFrame名为df
non_zero_rows = df[df.any(axis=1)]

df.any(axis=1)会返回一个布尔Series,标记每行是否有至少一个非零元素,用它索引就能拿到所有非全零的行。

2. 处理全零行:去重后保留唯一一行

接下来处理全零的行:先筛选出所有全零行,再用drop_duplicates()去掉重复项,只保留唯一的一行(如果你的需求是完全剔除所有全零行,这一步可以直接跳过):

# 筛选全零行并去重
zero_rows = df[~df.any(axis=1)].drop_duplicates()

这里~df.any(axis=1)是取反操作,用来拿到所有全零的行,drop_duplicates()会自动移除重复的全零行。

3. 合并结果

最后把两部分数据合并起来,重置索引就得到最终的DataFrame了:

# 合并数据并重置索引
result_df = pd.concat([non_zero_rows, zero_rows]).reset_index(drop=True)
实际示例演示

假设你的原始DataFrame是这样的:

data = {
    'col1': [1, 1, 0, 0, 0, 0],
    'col2': [0, 0, 2, 0, 0, 3],
    'col3': [0, 0, 0, 0, 0, 4]
}
df = pd.DataFrame(data)

运行上述代码后,result_df的结果如下:

col1col2col3
100
100
020
034
000

可以看到:有效数据的重复行被完整保留,重复的全零行只留下了一行,完全匹配你的需求。如果不需要保留任何全零行,直接使用第一步的non_zero_rows即可。

内容的提问来源于stack exchange,提问作者Julianno Sambatti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:49:57