这是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
的第一个值的最佳方法。这是我尝试过的,但我不确定它是否在任何情况下都有效。
groups = df.groupby(g).filter(lambda x: x.b.iloc[0] == 1)
型
我经历过一些情况,代码在一个例子中工作,但它并不适用于不同条件下的每一种情况,所以我想仔细检查我的代码。
2条答案
按热度按时间jljoyd4f1#
验证码
字符串
出来
型
4sup72z82#
另一种方法,使用
.ffill
和limit=
:字符串
印刷品:
型