如何获取DataFrame中条件值的行数?

时间:2019-08-23 06:19:05

标签: python pandas dataframe

我有这个数据框

     0   1   2   3   4   5   6   7   8 .... 1000

aa | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 7 |...| 1

bb | 0 | 1 | 0 | 0 | 0 | 0 | 3 | 0 | 0 |...| 0

cc | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |...| 1

dd | 0 | 0 | 5 | 0 | 0 | 1 | 0 | 1 | 0 |...| 0
.
.
.

zz | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |...| 0

我尝试使用:

DFcount = DF1.apply(lambda x: True if x.any() > 0 else  False,axis=1)
numOfRows = len(DFcount[DFcount == True].index)

我也尝试使用:

DFcount = DF1.apply(lambda x: True if x.all() > 0 else  False,axis=1)
numOfRows = len(DFcount[DFcount == True].index)

但是输出不是我期望的

输出应为所有列的总和,该列的所有行均值> 0

aa 100

bb 23

cc 56

dd 12
.
.
.

zz 5

,并按以下顺序降序排列:

aa 100

mm 98

cc 56

bb 23

dd 12
.
.
.

zz 5

1 个答案:

答案 0 :(得分:1)

使用:

df1 = df.gt(0).sum(axis=1).sort_values(ascending=False).rename_axis('a').reset_index(name='b')

print (df1)
    a  b
0  cc  4
1  zz  2
2  dd  2
3  aa  2
4  bb  1

说明

首先用0DataFrame.gt>)的所有值进行比较:

print (df.gt(0))
        0      1      2      3      4      5      6      7      8   1000
aa  False  False  False  False  False   True  False  False  False   True
bb  False   True  False  False  False  False  False  False  False  False
cc  False   True   True  False  False   True  False  False  False   True
dd  False  False  False  False  False   True  False   True  False  False
zz  False  False   True  False  False   True  False  False  False  False

然后将每行的True s个值(按1处理):

print (df.gt(0).sum(axis=1))
aa    2
bb    1
cc    4
dd    2
zz    2
dtype: int64

然后按Series.sort_values进行排序:

print (df.gt(0).sum(axis=1).sort_values(ascending=False))
cc    4
zz    2
dd    2
aa    2
bb    1
dtype: int64