这是我的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]
    }
)

面具是:

mask = (
    (df.a.notna()) &
    (df.b.notna())
)

预期输出:切片df,直到第一个实例mask.请注意,mask的第一行是INCLINDED:

      a        b
0   NaN      NaN
1   NaN      NaN
2   NaN      NaN
3  20.0      NaN
4  12.0   2333.0

mask的第一个实例是第4行.因此,将其分割到这个指数是目标.

这些都是我的try .第一个可行,但我不确定方法是否正确:

# 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添加到您的第二个解决方案:

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

Python相关问答推荐

在Python和matlab中显示不同 colored颜色 的图像

将numpy数组存储在原始二进制文件中

替换字符串中的多个重叠子字符串

如何从具有不同len的列表字典中创建摘要表?

Pandas:将多级列名改为一级

为什么NumPy的向量化计算在将向量存储为类属性时较慢?'

多指标不同顺序串联大Pandas 模型

未知依赖项pin—1阻止conda安装""

计算天数

isinstance()在使用dill.dump和dill.load后,对列表中包含的对象失败

通过ManyToMany字段与Through在Django Admin中过滤

在单次扫描中创建列表

在Docker容器(Alpine)上运行的Python应用程序中读取. accdb数据库

polars:有效的方法来应用函数过滤列的字符串

以异步方式填充Pandas 数据帧

不允许 Select 北极滚动?

浏览超过10k页获取数据,解析:欧洲搜索服务:从欧盟站点收集机会的微小刮刀&

我怎么才能用拉夫分拣呢?

用0填充没有覆盖范围的垃圾箱

Pandas 删除只有一种类型的值的行,重复或不重复