我有一个带有一堆名字和系列的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])
答案 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