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
。