有一组数据我type了一下,是dict格式的:
knn={(0,0): 0.0, (0,1): 0.18, (0,2): 0.12, (1,0): 0.10, (1,1): 0.07, (1,2): 0.16, (2,0): 0.16, (2,1): 0.09, (2,2): 0.10}
想获取分别[0,:],[1,:],[2,:]的最大值,类似于第0行、1行、二行的最大值。想请教一下代码该怎么写,感谢!
有一组数据我type了一下,是dict格式的:
knn={(0,0): 0.0, (0,1): 0.18, (0,2): 0.12, (1,0): 0.10, (1,1): 0.07, (1,2): 0.16, (2,0): 0.16, (2,1): 0.09, (2,2): 0.10}
想获取分别[0,:],[1,:],[2,:]的最大值,类似于第0行、1行、二行的最大值。想请教一下代码该怎么写,感谢!
思路就是转为DataFrame,利用DataFrame的groupby操作。
>>> df = pd.DataFrame([[key[0],knn[key]] for key in knn.keys()])
>>> grouped = df[1].groupby(df[0])
>>> print(grouped.max())
0
0 0.18
1 0.16
2 0.16
Name: 1, dtype: float64
获取第二大的数
>>> # 转为dataframe
... df = pd.DataFrame([[key[0],knn[key]] for key in knn.keys()])
>>> # 求最大行对应的行index
... max_index = df.groupby(df[0]).apply(lambda t: t[t[1]==t[1].max()]).index
>>> # 按照第一列删除最大的行
... df1 = df.drop([x[1] for x in max_index],axis=0)
>>> # 对删除后的数据进行取最值即为第二大的值
... grouped = df1[1].groupby(df1[0])
>>> print(grouped.max())
0
0 0.12
1 0.10
2 0.10
Name: 1, dtype: float64