Python 3.x 当值从大于阈值的值更改为0时,如何计数行
数据帧中有三列,X1 X2 X3,当值从大于1的值更改为0时,我想计算行数。如果0之前的值小于1,则不需要计数 输入df:Python 3.x 当值从大于阈值的值更改为0时,如何计数行,python-3.x,pandas,numpy,Python 3.x,Pandas,Numpy,数据帧中有三列,X1 X2 X3,当值从大于1的值更改为0时,我想计算行数。如果0之前的值小于1,则不需要计数 输入df: df1=pd.DataFrame({'x1':[3,4,7,0,0,0,0,20,15,16,0,0,70], 'X2':[3,4,7,0,0,0,0,20,15,16,0,0,70], 'X3':[6,3,0.5,0,0,0,0,20,15,16,0,0,70]}) print(df1) x1 X2
df1=pd.DataFrame({'x1':[3,4,7,0,0,0,0,20,15,16,0,0,70],
'X2':[3,4,7,0,0,0,0,20,15,16,0,0,70],
'X3':[6,3,0.5,0,0,0,0,20,15,16,0,0,70]})
print(df1)
x1 X2 X3
0 3 3 6.0
1 4 4 3.0
2 7 7 0.5
3 0 0 0.0
4 0 0 0.0
5 0 0 0.0
6 0 0 0.0
7 20 20 20.0
8 15 15 15.0
9 16 16 16.0
10 0 0 0.0
11 0 0 0.0
12 70 70 70.0
期望输出
x1_count X2_count X3_count
0 6 6 2
想法是将
0
替换为缺少的值,向前填充它们,将所有其他值转换为NaN
s,比较更大的值,如1
,并通过sum
对Series
进行计数,转换为一行DataFrame
,使用转置:
m = df1.eq(0)
df2 = (df1.mask(m)
.ffill()
.where(m)
.gt(1)
.sum()
.add_suffix('_count')
.to_frame()
.T
)
print (df2)
x1_count X2_count X3_count
0 6 6 2