我有一个像
这样的数据框x y cluster
0 112 4
0 113 4
1 111 4
我将从这个代码中获取位置:
for n in range(0,9):
...
location = np.array(cluseter_location )
我想按照列'cluster'的顺序排序,小列'y'的意思,所以我尝试了:
for n in range(0,9):
cluster_ = data2[data2['cluster_id']== n]
...
答案 0 :(得分:1)
在您的代码中,不要附加 cluster_int,只需附加元组 (n, cluster_int),然后在排序时使用 lambda 按每个元组的第二个值进行排序。
for n in range(0,9):
cluster_ = data2[data2['cluster_id']== n]
cluster_list = cluster_['y'].tolist()
cluster_avg = sum(cluster_list)/len(cluster_list)
cluster_int = int(cluster_avg)
print("cluster_id : %d" %n ,"average : %d" %cluster_int)
lst.append((n,cluster_int)) #<-------
a = sorted(lst, key = lambda x:x[1]) #<-------
print(a) #<-------
ordered_average = [average for cluster, average in a] #<-------
ordered_clusters = [cluster for cluster, average in a] #<-------
print(ordered_average) #<-------
print(ordered_clusters) #<-------
#cluster and average together
[(4,112),(8,121,(1,127),(6,139),(5,149)]
#averages sorted
[112, 121, 127, 139, 149]
#clusters sorted
[4,8,1,6,5]
一种更快的方法是在 groupby 之后直接对 Pandas 数据帧进行排序。
print(df.groupby('cluster')['y'].mean().reset_index().sort_values('y'))