Pandas 获取分组数据帧中的特定行

Pandas 获取分组数据帧中的特定行,pandas,Pandas,我有一个熊猫数据框 由列组成的euc数据 code1 code2 euclidean_distance 我想为每组代码1按欧几里德距离排序得到前50行, 为了得到这个,我使用了: matrix_top_50 = euc_data.sort_values(['code1', 'euclidean_distance']) .groupby('code1').head(50).reset_index(drop=True) 现在,我想创建另一个矩阵,为每组code1按欧几里德距离排序得到接下来的1

我有一个熊猫数据框 由列组成的euc数据

code1  code2 euclidean_distance
我想为每组代码1欧几里德距离排序得到前50行, 为了得到这个,我使用了:

matrix_top_50 = euc_data.sort_values(['code1', 'euclidean_distance'])
.groupby('code1').head(50).reset_index(drop=True)
现在,我想创建另一个矩阵,为每组code1欧几里德距离排序得到接下来的100行

为此,我尝试使用.iloc

start = 51
end = 151
next_matrix = euc_data.sort_values(['code1', 'euclidean_distance'])
.groupby('code1').iloc[start:end].reset_index(drop=True)
但我得到了一个错误:

无法访问'DataFrameGroupBy'对象的可调用属性'iloc',请尝试使用'apply'方法

如何实现这一点?

我认为您需要,但必要时数据必须包含
开始
结束
的行,否则错误:

ext_matrix = (euc_data.sort_values(['code1', 'euclidean_distance'])
                      .groupby('code1')
                      .apply(lambda x: x.iloc[start:end])
                      .reset_index(drop=True) 
              )

也许有更好的解决方案,但您可以使用
apply
作为错误提示:

next_matrix = euc_data.sort_values(['code1', 'euclidean_distance'])\
    .groupby('code1').apply(lambda x: x.iloc[start:end]).\
    reset_index(drop=True)

是否要为每组代码1执行此操作?你知道groupby的工作是什么吗?@AndreyF是的,我想为每一组code1@AndreyF我按问题编辑,谢谢:)一些数据和预期输出会很好…工作正常,只需测试两个数据帧,
matrix\u top\u 50和ext\u matrix
Super之间是否存在交集,很高兴能帮上忙!