首页 > 解决方案 > 如何仅显示值大于 x 的列

问题描述

我有一个包含 14000 行和 80 列的数据框,所有二进制条目(1 和 0),请参见下面的最小示例。我想为某个索引(行)显示所有值> 0的列。

import pandas as pd  
import numpy as np

dat = np.array([[0,1,0,1,0,0],
                [0,0,0,1,1,0],
                [1,0,0,0,0,0],
                [0,0,0,0,0,1],
                [0,1,0,1,0,0]])

df= pd.DataFrame(dat, columns = ["p%d" % (i + 1) for i in range(6)])

预期/想要的输出是显示指定索引(行)的值 >0 的所有列:

    p6
3    1

我尝试了以下方法,它显示了任何行中包含 1 的所有列:

df.loc[df.index == 3, df.gt(0).any()]
# out:   
#      p1   p2  p4  p5  p6
#  3    0   0   0   0   1

也试过.all()了,这将显示所有行中都有 1 的列。这些按列操作,而不仅仅是索引 == 3 处的值,可能是因为它在逗号之后,所以我也尝试了这个,给出了错误:

df.loc[(df.index == 3) & (df.gt(0).any())]
# ValueError: operands could not be broadcast together with shapes (5,) (6,)

谢谢你

标签: pythonarrayspandasdataframeslice

解决方案


IUIC,你可以使用

In [348]: c = df.loc[[3]]

In [349]: c.loc[:, c.gt(0).all()]
Out[349]:
   p6
3   1

推荐阅读