对数据帧(包括掩码的第一个实例)进行切片的最佳方法是什么?

问题描述 投票:0回答:1

这是我的数据框:

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
的第一个实例是行
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()]
python pandas dataframe
1个回答
0
投票

用途:

out = df[~mask.shift(fill_value=False).cummax()]
print (out)
      a       b
0   NaN     NaN
1   NaN     NaN
2   NaN     NaN
3  20.0     NaN
4  12.0  2333.0
© www.soinside.com 2019 - 2024. All rights reserved.