Python 按连续计数分组

Python 按连续计数分组,python,python-2.7,pandas,group-by,Python,Python 2.7,Pandas,Group By,以下是数据: ID Type 1 In 1 In 1 Out 1 In 2 Out 2 In 2 In 2 In 2 Out 问题:我想要一个pandas查询,可以获取“In”连续出现两次以上的ID。因此,如果我对上述数据运行查询,它应该只能获取2个数据。我认为您使用了错误的工具。 我建议您尝试使用xml解析器,如果出于未知原因,您仍然计划将html数据存储在pandas中,我认为您可以迭代这些行并解析它们。 不过,我建议您只需获取它并在其他地方解析它。

以下是数据:

ID  Type
1   In
1   In
1   Out
1   In
2   Out
2   In
2   In
2   In
2   Out

问题:我想要一个pandas查询,可以获取“In”连续出现两次以上的ID。因此,如果我对上述数据运行查询,它应该只能获取2个数据。

我认为您使用了错误的工具。
我建议您尝试使用xml解析器,如果出于未知原因,您仍然计划将html数据存储在pandas中,我认为您可以迭代这些行并解析它们。
不过,我建议您只需获取它并在其他地方解析它。
至于嵌套的标记,可能会很有用

编辑:你编辑了你的问题,所以这里有一个新的答案 要选择重复行,请尝试以下操作:

df.groupby([...]).filter(lambda df:df.shape[0] > 1)
试试这个:

df.groupby('ID')['Type'].agg(lambda x: (x=='In').rolling(3).apply(lambda x: x.all()).max())
Out[34]: 
ID
1    0.0
2    1.0
Name: Type, dtype: float64
对于满足条件的组,它将返回1,否则返回0

它首先按ID分组,并采用类型列。例如,它有两个组:
{1:['In','In','Out','In'],2:['Out','In','In','In','In','Out']}
。对于每个组(
x
),它首先创建一个布尔序列
x=='In'
。该系列是
[True,True,False,True]
[False,True,True,False]
。现在,在这些序列上,它应用了滚动函数。它一次需要三个并计算
x.all()
。对于第一个组,前三个(
[True,True,False]
)和后三个(
[True,False,True]
)返回False,因为所有三个都应为True。这两个错误的最大值为0。对于第二组,滚动方法将产生(
[False,True,True],[True,True,True],[True,True,False]
),因此对于第二组,
x.all()
将为True,因此最大值为1

Series.rolling()
我相信是在pandas 0.18中引入的。对于早期版本,您可以使用:

df.groupby('ID')['Type'].agg(lambda x: pd.rolling_apply(x=='In', 3, lambda x: x.all()).max())

为什么要使用pandas?我认为最好的方法是删除这个问题,然后用一些纯文本(不是html)的示例和一些代码创建新的,你会怎么做。然后你会得到很多很好的答案。非常抱歉,伙计们!你看,菜鸟!我有数据的行和列,我不知道如何表示数据……让我知道,如果这新的编辑工作,考虑接受,如果didit说<代码>属性错误:“系列”对象没有属性“滚动”< /代码>我在Python 2.7 AcANDA Distu可能需要更新熊猫。您需要v18.0。或者你可以使用rolling_apply。谢谢@ayhan先生!一切都像魔法一样运作。。。不过,我希望这个问题能得到保护。想解释一下这个答案吗?当然,我补充了一个解释。如果有什么不清楚的地方,请告诉我。尽可能清楚!非常感谢你!