我有一个熊猫数据帧 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
我怎样才能实现这个目标?
答案 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