Este é o meu DataFrame:
import pandas as pd
import numpy as np
df = pd.DataFrame(
{
'a': [np.nan, np.nan, np.nan, 20, 12, 42, 33, 32, 31],
'b': [np.nan, np.nan, np.nan, np.nan, 2333, np.nan, np.nan, 12323, np.nan]
}
)
Máscara é:
mask = (
(df.a.notna()) &
(df.b.notna())
)
Resultado esperado: fatiar df
até a primeira instância do mask
. Observe que a primeira linha do mask
está INCLUÍDA:
a b
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 20.0 NaN
4 12.0 2333.0
Esta primeira instância mask
é row 4
. Portanto, dividi-lo nesse índice é o objetivo.
Estas são minhas tentativas. O primeiro funciona, mas não tenho certeza se a abordagem está correta:
# attempt 1
idx = df.loc[mask.cumsum().eq(1) & mask].index[0]
df = df.loc[:idx]
print(df)
# attempt 2
out = df[~mask.cummax()]
Adicione
DataFrame.shift
à sua segunda solução: