这是我的DataFrame:

import pandas as pd
df = pd.DataFrame(
    {
        'a': [10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70],
        'b': [1, 1, 1, -1, -1, -2, -1, 2, 2, -2, -2, 1, -2],
    }
)

面具是:

mask = (
    (df.b == -2) &
    (df.b.shift(1) > 0)
)

预期输出:将df切片到mask的第一个实例:

   a  b
0  10  1
1  15  1
2  20  1
3  25 -1
4  30 -1
5  35 -2
6  40 -1
7  45  2
8  50  2

掩码的第一个实例位于行9处.所以我想把df分割成这个索引.

这就是我try 过的.这是可行的,但我不确定这是否是最好的方法:

idx = df.loc[mask.cumsum().eq(1) & mask].index[0]
result = df.iloc[:idx]

推荐答案

您可以使用Series.cummax的倒置掩码过滤:

out = df[~mask.cummax()]
print (out)

    a  b
0  10  1
1  15  1
2  20  1
3  25 -1
4  30 -1
5  35 -2
6  40 -1
7  45  2
8  50  2

How it working:

print (df.assign(mask=mask,
                 cumax=mask.cummax(),
                 inv_cummax=~mask.cummax()))

     a  b   mask  cumax  inv_cummax
0   10  1  False  False        True
1   15  1  False  False        True
2   20  1  False  False        True
3   25 -1  False  False        True
4   30 -1  False  False        True
5   35 -2  False  False        True
6   40 -1  False  False        True
7   45  2  False  False        True
8   50  2  False  False        True
9   55 -2   True   True       False
10  60 -2  False   True       False
11  65  1  False   True       False
12  70 -2   True   True       False

Python相关问答推荐

如何根据情况丢弃大Pandas 的前n行,使大Pandas 的其余部分完好无损

线性模型PanelOLS和statmodels OLS之间的区别

时间序列分解

为什么tkinter框架没有被隐藏?

从收件箱中的列中删除html格式

pandas滚动和窗口中有效观察的最大数量

如何制作10,000年及以后的日期时间对象?

在Mac上安装ipython

如何获取numpy数组的特定索引值?

Pre—Commit MyPy无法禁用非错误消息

删除marplotlib条形图上的底边

Python逻辑操作作为Pandas中的条件

在Python 3中,如何让客户端打开一个套接字到服务器,发送一行JSON编码的数据,读回一行JSON编码的数据,然后继续?

Matplotlib中的字体权重

搜索按钮不工作,Python tkinter

并行编程:同步进程

每次查询的流通股数量

Match-Case构造中的对象可调用性测试

普洛特利express 发布的人口普查数据失败

解析CSV文件以将详细信息添加到XML文件