如何获取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
相关产品推荐
相关产品推荐

