Python 如何按降序排列数据框列

Python 如何按降序排列数据框列,python,pandas,Python,Pandas,我有一个熊猫数据框tsp\u data\u unique如下 order_id quant_bought Clusters 0 537 2 Cluster 2 1 540 1 Cluster 10 2 541 1 Cluster 4 3 542 2 Cluster 2

我有一个熊猫数据框
tsp\u data\u unique
如下

      order_id    quant_bought    Clusters
 0       537            2         Cluster 2
 1       540            1         Cluster 10
 2       541            1         Cluster 4
 3       542            2         Cluster 2
 4       543            2         Cluster 2
 5       545            3         Cluster 2
 6       546            2         Cluster 2
 7       548            3         Cluster 1
 8       549            3         Cluster 6
 9       550            4         Cluster 2
 10      553            1         Cluster 11
 11      555            1         Cluster 1
 12      556            1         Cluster 1
 13      557            1         Cluster 3
 14      584            3         Cluster 2
 15      586            3         Cluster 2
 16      587            3         Cluster 5
 17      588            1         Cluster 7
 18      589            1         Cluster 10
 19      590            1         Cluster 9
 20      591            2         Cluster 2
 21      592            3         Cluster 2
 22      593            1         Cluster 2
 23      594            7         Cluster 8
 24      595            3         Cluster 2
 25      596            1         Cluster 1
 26      608            2         Cluster 2
 27      609            4         Cluster 2
第二个数据帧为
df

      Clusters                                           order_id
0    Cluster 1                               [548, 555, 556, 596]
1   Cluster 10                                         [540, 589]
2   Cluster 11                                              [553]
3    Cluster 2  [537, 542, 543, 545, 546, 550, 584, 586, 591, ...
4    Cluster 3                                              [557]
5    Cluster 4                                              [541]
6    Cluster 5                                              [587]
7    Cluster 6                                              [549]
8    Cluster 7                                              [588]
9    Cluster 8                                              [594]
10   Cluster 9                                              [590] 
现在我想将
df的
Cluster 2的
order\u id按第一个数据帧中的
quant\u购买的
列降序排列

我正在用python做以下工作

 p  =  df.order_id[df['Clusters'] == 'Cluster 2']
 a = tsp_data_unique['order_id'].isin(p.values[0])
 b = tsp_data_unique['quant_bought'][a]   
 b.sort() 
 b = b[::-1]
 p = tsp_data_unique['order_id'][b.index]
 list_p = p.values.tolist()
 df.order_id[df['Clusters'] == 'Cluster 2'] = list_p
当我将降序列表分配给
df
中的
Cluster 2
时,它给出了一个错误

ValueError:替换的长度必须等于序列长度

请帮忙。

希望这有帮助

In [25]: tsp_data_unique
Out[25]: 
   order_id  quant_bought  cluster
0       537             2        4
1       540             1        3
2       541             5        4
3       542             1        4
4       544             2        3

In [26]: df = tsp_data_unique.sort_values(['cluster', 'order_id'], ascending=[True, False]).groupby('cluster')['order_id'].apply(lambda x: x.tolist())

In [27]: df
Out[27]: 
cluster
3         [544, 540]
4    [542, 541, 537]
Name: order_id, dtype: object
希望这有帮助

In [25]: tsp_data_unique
Out[25]: 
   order_id  quant_bought  cluster
0       537             2        4
1       540             1        3
2       541             5        4
3       542             1        4
4       544             2        3

In [26]: df = tsp_data_unique.sort_values(['cluster', 'order_id'], ascending=[True, False]).groupby('cluster')['order_id'].apply(lambda x: x.tolist())

In [27]: df
Out[27]: 
cluster
3         [544, 540]
4    [542, 541, 537]
Name: order_id, dtype: object

在这里,您试图将列表指定为数据框中的元素。但是,它希望列表中有一个值,如
[5]
。由于您分配的列表长度为
>1
,并且您尝试替换的值的长度仅为1,因此长度不匹配,Python会抛出错误

要解决此问题,请尝试将您的列表用作另一个列表的第一个元素,如下所示:

df.order_id[df['Clusters'] == 'Cluster 2'] = [ list_p ]

在这里,您试图将列表指定为数据框中的元素。但是,它希望列表中有一个值,如
[5]
。由于您分配的列表长度为
>1
,并且您尝试替换的值的长度仅为1,因此长度不匹配,Python会抛出错误

要解决此问题,请尝试将您的列表用作另一个列表的第一个元素,如下所示:

df.order_id[df['Clusters'] == 'Cluster 2'] = [ list_p ]

我认为使用列中的列表并不容易

如果
index
值,其中
df['Clusters']=='Cluster 2'
仅为一个,则可以使用:


我认为使用列中的列表并不容易

如果
index
值,其中
df['Clusters']=='Cluster 2'
仅为一个,则可以使用:


我想你没有明白我的问题。我想根据第一个数据帧中购买的数量降序排列
Cluster 2 order\u id
。我想你没有明白我的问题。我想根据第一个数据帧中购买的数量降序排序
Cluster 2 order\u id