Pandas:行匹配查询后,如何得到每n行的组?

2024-04-19 05:35:12 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个熊猫数据帧:

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并快速执行


Tags: importdfsizeindexvalueasnprandom
1条回答
网友
1楼 · 发布于 2024-04-19 05:35:12

我想你可以用cumsumgroupbyhead来做这件事:

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

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

总而言之,试试这个

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

相关问题 更多 >