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

时间:2018-01-23 10:50:51

标签: pandas

我有一个熊猫数据帧 euc数据由列

组成
code1  code2 euclidean_distance

我希望按欧几里德距离排序的每组 code1 排名前50行, 得到这个我用过:

matrix_top_50 = euc_data.sort_values(['code1', 'euclidean_distance'])
.groupby('code1').head(50).reset_index(drop=True)

现在我想创建另一个矩阵,为每个 code1 组排序欧几里德距离

为此,我尝试使用 .iloc

start = 51
end = 151
next_matrix = euc_data.sort_values(['code1', 'euclidean_distance'])
.groupby('code1').iloc[start:end].reset_index(drop=True)

但是我收到了错误:

Cannot access callable attribute 'iloc' of 'DataFrameGroupBy' objects, try using the 'apply' method

我怎样才能实现这个目标?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

我认为您需要GroupBy.apply,但必要的数据必须包含-- Create the data type CREATE TYPE TestType AS TABLE ( Id INT NOT NULL, Col1 VARCHAR(20) NOT NULL) GO -- Create the tabled valued function CREATE FUNCTION TestFunction () RETURNS @Results TABLE (Result1 INT, Result2 INT) AS BEGIN -- Fill the table variable with the rows for your result set DECLARE @Var1 TestType; RETURN END GO start行,否则错误:

end