pandas:如何在行匹配查询后获取每n行的组?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas:如何在行匹配查询后获取每n行的组?相关的知识,希望对你有一定的参考价值。

假设我有这个pandas数据帧:

import pandas as pd
import numpy as np
df = pd.DataFrame({'x': np.random.randint(-10, 10, size=100),
                   'y': np.random.randint(-10, 10, size=100)})

我有任何选择行的查询,例如

query = (df['x'] > 3) & (df['y'] < 0)

如何获取与此查询匹配的行组以及下一个连续的k行(如果小于k,则返回多个可用的行)?

例如,对于k = 2,一个繁琐且手动的方法是:

# 1st value
sel0 = df[query].reset_index()

# 2nd value
sel1 = df[query.shift(1).fillna(False)].reset_index()

# 3rd value
sel2 = df[query.shift(2).fillna(False)].reset_index()

concat_df = pd.concat([sel0, sel1, sel2])
grouped_df = concat_df.groupby(concat_df.index)
groups = [grouped_df.get_group(i) for i in grouped_df.groups]

是否有一个单行可以将其推广到任何k并快速执行?

答案

我想你可以用cumsumgroupbyhead做到这一点:

试试这个,其中k = 2使用head(3),当前记录加上两个:

df.groupby(query.cumsum()).head(3)

并概括试试这个

k=2
df.groupby(query.cumsum()).head(k+1)

以上是关于pandas:如何在行匹配查询后获取每n行的组?的主要内容,如果未能解决你的问题,请参考以下文章

Pandas groupby计算每n行的平均值

grep命令

每天获取一个非常大的 Pandas DataFrame 中所有行的总和,这些行在两个特定列中匹配

Pandas DataFrame:如何在行和列范围内获得最小值

pandas筛选dataframe数据:获取dataframe的第二行到第N行的数据

MySQL分组查询后如何获取每组的前N条数据,你会吗?