我有这个数据框
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
答案 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
说明:
首先用0
与DataFrame.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