如何根据列值获取pandas数据帧系列名称?

时间:2018-02-12 20:23:19

标签: python pandas indexing

我有一个带有一堆名字和系列的python pandas数据框,我创建了一个最后一列,我总结了这个系列。我想得到系列之和等于0的行名称,所以我可以稍后删除这些行。我的数据框如下(我创建的最后一列只是为了总结系列):

      1   2   3   4  total
Ash   1   0   1   1  3
Bel   0   0   0   0  0
Cay   1   0   0   0  1
Jeg   0   1   1   1  3
Jut   1   1   1   1  4

基于最后一栏,系列" Bel"是0,所以我希望能够打印出该名称,然后我可以删除该行或保留这些行的记录。

到目前为止,这是我的代码:

def check_empty(df):
    df['total'] = df.sum(axis=1) # create the 'total' column to find zeroes
    for values in df['total']:
        if values == 0:
            print(df.index[values)

但这显然是错误的,因为我将0的索引传递给此循环,它将始终打印第一行的名称。不知道我可以在这里实施什么方法?

下面有很好的解决方案,我也找到了一种使用更简单的python技巧的方法,枚举(因为我仍然觉得列表理解很难写):

 def check_empty(df):
     df['total'] = df.sum(axis=1)
     for name, values in enumerate(df['total']):
         if values == 0:
            print(df.index[name])

2 个答案:

答案 0 :(得分:1)

可能的一种方法是使用df中的值过滤total的位置:

def check_empty(df):
    df['total'] = df.sum(axis=1) # create the 'total' column to find zeroes
    index = df[df['total'] == 0].index.values.tolist()
    print(index)

如果您想要遍历行,那么使用df.iterrows()也可能是其他方式:

def check_empty(df):
    df['total'] = df.sum(axis=1) # create the 'total' column to find zeroes
    for index, row in df.iterrows():
        if row['total'] == 0:
            print(index)

答案 1 :(得分:1)

另一个选项是np.where

import numpy as np
df.iloc[np.where(df.loc[:, 'total'] == 0)]

输出:

     1  2  3  4  total
Bel  0  0  0  0      0