Вы можете использовать df.notna()
с cumsum
и idxmax
Кроме того, для обработки случаев, когда могут быть * NaN
значения для столбца не используют series.where
с тем же решением, но условием, которое проверяет сумму нулевых значений
df.notna().cumsum().eq(2).idxmax().where(df.isna().sum().gt(1))
Пример:
data = {'id': [np.nan,1,1,np.nan,2,3],
'value': ['a','a',np.nan,np.nan,'b','c'],
'obj_id': [np.nan,2,3,3,3,np.nan],
'test': [1,2,3,4,5,6]}
df = pd.DataFrame (data)
id value obj_id test
0 NaN a NaN 1
1 1.0 a 2.0 2
2 1.0 NaN 3.0 3
3 NaN NaN 3.0 4
4 2.0 b 3.0 5
5 3.0 c NaN 6
Для проверки уровня столбца:
df.notna().cumsum().eq(2).idxmax().where(df.notna().sum().gt(1))
id 2
value 1
obj_id 2
test 1
dtype: float64
Для уровня строки вы можете использовать те же логы c, но с осью = 1:
df.notna().cumsum(1).eq(2).idxmax(1).where(df.notna().sum(1).gt(1))
0 test
1 value
2 obj_id
3 test
4 value
5 value
dtype: object