pandas:打印行中包含非零元素的列名



我有一个DataFrame与一堆列的值是0或1。例如,

import numpy as np
import pandas as pd
df = pd.DataFrame(np.array([[0,1,0,1],[1,1,0,0]]), columns=['a','b','c','d'])
df
a   b   c   d
0   0   1   0   1
1   1   1   0   0

在给定的行(比如0)中,我想打印非零列的名称。我试着用

df.iloc[0].nonzero()

但不是得到'b', 'd'(甚至[1,3],因为nonzero()应该返回索引),我得到

AttributeError: 'Series' object has no attribute 'nonzero'

(编辑:忘记这行:我认为nonzero()是Series的一个方法。)

如何获得所需的列名?

(在询问此问题之前尝试搜索,但未找到任何重复项)

根据pandas文档,Series.nonzero()Series.to_numpy().nonzero()取代。不是

df.iloc[0].nonzero()

df.iloc[0].to_numpy().nonzero()

试试这个:

df.iloc[0].loc[lambda df: df.ne(0)].index
Index(['b', 'd'], dtype='object')

最新更新