如何从数据框的最后一列中找到连续的 1 并计算多少次

how to find consecutive 1 from last column of data frame and count how many time

第一个数据框中有 5 列。通过使用这个查找从最后一个 D_4 到 D_1 的连续 1,如果在两者之间找到 0,则中断并直到那将输出多少个

您可以将每一行连接为从 D_4 到 D_1 的字符串,首先将字符串拆分一次 '0' 然后获取第一部分的长度:

df['lco'] = (df.iloc[:, :0:-1].astype(str).apply(''.join, axis=1)
                              .str.split('0', n=1).str[0].str.len())
print(df)

# Output
  Code  D_1  D_2  D_3  D_4  lco
0    A    0    1    0    1    1
1    B    1    1    0    1    1
2    C    0    0    1    1    2
3    D    1    1    1    1    4
4    E    0    0    0    1    1
5    F    0    0    0    0    0
6    G    1    1    1    0    0
7    H    1    0    1    1    2

您可以 melt,使用每组反向 cummin 去除尾随的 1,然后计算 1:

df.merge(df.melt('Code', value_name='num')
           .groupby('Code')['num']
           .apply(lambda s: s[::-1].cummin().sum()),
         on='Code'
         )

或者,在适当的位置,使用 stack:

df['num'] = (df
   .iloc[:,1:].stack()
   .groupby(level=0)
   .apply(lambda s: s[::-1].cummin().sum())
)

输出:

  Code  D_1  D_2  D_3  D_4  num
0    A    0    1    0    1    1
1    B    1    1    0    1    1
2    C    0    0    1    1    2
3    D    1    1    1    1    4
4    E    0    0    0    1    1
5    F    0    0    0    0    0
6    G    1    1    1    0    0
7    H    1    0    1    1    2