我有一个包含列的数据框:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [False, True, False, False, False, False, True, True, False, True],
'B': [True, False, False, False, True, True, False, False, False, False ]
})
df
A B
0 False True
1 True False
2 False False
3 False False
4 False True
5 False True
6 True False
7 True False
8 False False
9 True False
遇到
[True - False]
值对后,如何识别并标记第一个出现 [False - False]
的情况?满足此条件的每一行都需要在新列中进行标记。
在上面的示例中,
[3 False False]
后面跟着 [6 True False]
,并且 [8 False False]
后面跟着 [9 True False]
。
这些是本示例中唯一有效的解决方案。
您可以使用:
# identify start of group
m1 = df.eq([False, False]).all(axis=1)
# condition
m2 = df.eq([True, False]).all(axis=1)
# form groups
group = m1.cumsum()
# keep only rows with valid condition and after a start of group
# get the first value per group
idx = m2[m2 & (group>0)].groupby(group).idxmax().tolist()
# variant
# idx = m2.index.to_series()[m2 & (group>0)].groupby(group).first().tolist()
# assign flag
df.loc[idx, 'flag'] = 'X'
输出:
A B flag
0 False True NaN
1 True False NaN
2 False False NaN
3 False False NaN
4 False True NaN
5 False True NaN
6 True False X
7 True False NaN
8 False False NaN
9 True False X
中间体:
A B m1 m2 group flag
0 False True False False 0
1 True False False True 0
2 False False True False 1
3 False False True False 2
4 False True False False 2
5 False True False False 2
6 True False False True 2 X
7 True False False True 2
8 False False True False 3
9 True False False True 3 X