0

我在数据框中有三列 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    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
4

1 回答 1

1

想法是替换0为缺失值,向前填充它们,将所有其他值转换为NaNs,比较更大的相似值1并计数Trues 以通过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
于 2020-02-20T10:21:12.973 回答