这是这post的延伸.

这是我的数据框:

import pandas as pd
df = pd.DataFrame(
    {
        'a': [ 1, 1, 1,  0, 1,  0,  1, 1,  0,  0, 1, 1,  0,  0],
        'b': [-1, 1, 1, -1, 1, -1, -1, 1, -1, -1, 1, 1, -1, -1]
    }
)

而我想要的结果是将它们分组:

    a  b
4   1  1
5   0 -1

10  1  1
11  1  1
12  0 -1

基本上,我想将它们按1和在列a中结束的位置之后的一行的连续性分组. 这answer个是这样做的:

g = df.loc[::-1, 'a'].eq(0).cumsum()

out = [g for _,g in df.groupby(g, sort=False) if len(g)>1]

但现在我想要的是判断每个组的b中的第一个值是否为1.

我不知道判断第一个值b的最佳方法是什么. 这就是我try 过的方法,但我不确定它是否在所有情况下都有效.

groups = df.groupby(g).filter(lambda x: x.b.iloc[0] == 1)

我经历过一些情况,其中代码在示例中可以工作,但它并不是在具有不同条件的每种情况下都能工作,所以我想重新判断我的代码.

推荐答案

Code

g = df['a'].eq(0).cumsum().sub(df['a'].eq(0)) # grouper
cond1 = df.groupby(g)['b'].transform('first').eq(1) # first of colb is 1
cond2 = df.groupby(g)['b'].transform('count').gt(1) # len of group  is greater than 1
输出 = [d for _, d in df[cond1 & cond2].groupby(g)] # filter by cond1 and cond2

输出

[   a  b
 4  1  1
 5  0 -1,
     a  b
 10  1  1
 11  1  1
 12  0 -1]

Python相关问答推荐

如何最好地处理严重级联的json

在Docker中运行HAProxy时无法获得503服务

单击Python中的复选框后抓取数据

如何编写一个正规表达式来查找序列中具有2个或更多相同辅音的所有单词

替换字符串中的点/逗号,以便可以将其转换为浮动

强制venv在bin而不是收件箱文件夹中创建虚拟环境

如何用symy更新分段函数

有条件地采样我的大型DF的最有效方法

无法使用equals_html从网址获取全文

当密钥是复合且唯一时,Pandas合并抱怨标签不唯一

如何使用scipy从频谱图中回归多个高斯峰?

在Python中对分层父/子列表进行排序

如何根据参数推断对象的返回类型?

Pandas 都是(),但有一个门槛

图像 pyramid .难以创建所需的合成图像

导入...从...混乱

在单个对象中解析多个Python数据帧

如何合并两个列表,并获得每个索引值最高的列表名称?

LocaleError:模块keras._' tf_keras. keras没有属性__internal_'''

OpenCV轮廓.很难找到给定图像的所需轮廓