这是我的数据框:
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]
}
)
掩码是:
mask = (
(df.a.notna()) &
(df.b.notna())
)
预期输出:切片df
到 的第一个实例mask
。请注意,第一行mask
已包含:
a b
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 20.0 NaN
4 12.0 2333.0
第一个实例mask
是 row 4
。因此,将其分割到该索引就是目标。
这些是我的尝试。第一个有效,但我不确定该方法是否正确:
# attempt 1
idx = df.loc[mask.cumsum().eq(1) & mask].index[0]
df = df.loc[:idx]
print(df)
# attempt 2
out = df[~mask.cummax()]
添加
DataFrame.shift
到您的第二个解决方案: