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

如何获取Pandas DataFrame中求和列值为0的行名称并删除行?

解决Pandas DataFrame筛选求和为0的行并获取名称的问题

嘿,这事儿不难,我给你一步步拆解怎么实现:

1. 先新增求和列

首先你需要给DataFrame加一列,用来计算每一行的Series值总和。这里要注意排除非数值列(比如你的Name列),避免把字符串也算进去。两种常用方法供你选:

# 方法1:自动识别所有数值列求和(省心,适合列名不固定的情况)
df['Total'] = df.select_dtypes(include='number').sum(axis=1)

# 方法2:指定具体的Series列求和(更精准,适合列名固定的场景)
df['Total'] = df[['Series1', 'Series2', 'Series3']].sum(axis=1)

这里的axis=1一定要注意,它表示按行求和,要是写成axis=0就变成按列求和了,完全不是你要的结果。

2. 筛选求和为0的行并提取名称

接下来用布尔索引精准定位Total列等于0的行,然后直接提取对应的Name列即可:

# 获取所有求和为0的名称,返回列表格式方便后续处理
zero_sum_names = df.loc[df['Total'] == 0, 'Name'].tolist()

# 如果想查看这些行的完整信息,直接筛选就行
zero_sum_rows = df[df['Total'] == 0]

比如你的示例里,zero_sum_names就会得到['Bel'],完全符合你的需求。

3. 可选:删除这些求和为0的行

如果后续要删掉这些行,两种常用方式任你选:

# 方式1:直接筛选保留非0行(推荐,逻辑直观,不会误删)
df_cleaned = df[df['Total'] != 0]

# 方式2:通过索引删除(适合需要原地修改原DataFrame的场景)
df.drop(df[df['Total'] == 0].index, inplace=True)

注意inplace=True会直接修改原DataFrame,不需要重新赋值;如果不用这个参数,记得把结果存到新变量里。

完整示例代码

把以上步骤整合起来,完整的可运行代码如下:

import pandas as pd

# 模拟你的DataFrame结构
data = {
    'Name': ['Alice', 'Bob', 'Bel', 'Charlie'],
    'Series1': [1, 2, 0, 3],
    'Series2': [2, -2, 0, -1],
    'Series3': [-3, 0, 0, -2]
}
df = pd.DataFrame(data)

# 新增求和列
df['Total'] = df.select_dtypes(include='number').sum(axis=1)

# 获取求和为0的名称
zero_sum_names = df.loc[df['Total'] == 0, 'Name'].tolist()
print("求和为0的名称:", zero_sum_names)  # 输出:求和为0的名称: ['Bel']

# 删除目标行得到清理后的DataFrame
df_cleaned = df[df['Total'] != 0]
print("\n删除后的DataFrame:")
print(df_cleaned)

这样操作下来,你就能轻松拿到目标名称,也能完成后续的删除或记录操作啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:47:16