如何从数据框的最后一列中找到连续的 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
第一个数据框中有 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