【问题标题】:How can I sort multiple lists by sorting one list?如何通过对一个列表进行排序来对多个列表进行排序?
【发布时间】:2020-09-15 13:16:29
【问题描述】:

所以我有一个与列表和分配值有关的问题。我有 5 个客户和一些人为创建的随机变量(价格和成本)。我想将这些值分配给客户 1、2 ... 5,以便将这些值固定给客户。

因此,客户 1 应该有一个随机生成的价格值,平均值为 10,标准差为 1。这个客户应该有一个随机生成的成本值,平均值为 8,标准差为 1。

这应该为每个客户完成。我如何为每个客户编写代码(这样我就不必为每个客户创建一个带有价格 [...] 和成本 [...] 的新行?下一个问题是,我如何按成本排序这样其他变量也被排序了吗?所以客户 4 的成本最高(= 9),然后是客户 1、3、5,最后是客户 3。然后我也希望能够通过这个排名对其他价格进行排序。我的代码如下:

avg_price = [10 3 5 5 8] 
avg_costs = [8 3 5 9 4]
std_dev_price = [1 2 1 1 2]
std_dev_costs = [1 1 2 2 1]
num_reps = 10
price0 = np.random.normal(avg_price[0], std_dev_price[0], num_reps)
costs0 = np.random.normal(avg_costs[0], std_dev_costs[0], num_reps)
...
price4 = np.random.normal(avg_price[4], std_dev_price[4], num_reps)
costs4 = np.random.normal(avg_costs[4], std_dev_costs[4], num_reps)

【问题讨论】:

  • 您将不得不将您的数据转换成不同的格式。
  • price = [np.random.normal(avg_price[0], std_dev_price[0], num_reps) for i in range(5)] 呢?

标签: python list sorting


【解决方案1】:

为了创建规范化数组,您可以使用数组和循环。要按单个列表中的值对所有列表进行排序,您可以将它们合并到一个数据框中,然后对数据框进行排序。

试试这个代码:

import numpy as np
import pandas as pd

avg_price = [10, 3, 5, 5, 8] 
avg_costs = [8, 3, 5, 9, 4]
std_dev_price = [1, 2, 1, 1, 2]
std_dev_costs = [1, 1, 2, 2, 1]

print('Start:')
print(' avg_price',avg_price,'\n','avg_costs',avg_costs,'\n','std_dev_price',std_dev_price,'\n','std_dev_costs',std_dev_costs,'\n')

num_reps = 10
price = []
costs = []
for i in range(len(avg_price)):
    price.append(np.random.normal(avg_price[i], std_dev_price[i], num_reps))
    costs.append(np.random.normal(avg_costs[i], std_dev_costs[i], num_reps))
    
# merge lists to dataframe
dd = {'avg_price':avg_price,'avg_costs':avg_costs,'std_dev_price':std_dev_price,'std_dev_costs':std_dev_costs,'price':price,'costs':costs}
df = pd.DataFrame(dd) 

# sort all columns by avg_costs
df = df.sort_values(by=['avg_costs'], ascending=False)  

# revert back to lists
avg_price = df['avg_price'].to_list()
avg_costs = df['avg_costs'].to_list()
std_dev_price = df['std_dev_price'].to_list()
std_dev_costs = df['std_dev_costs'].to_list()
price = df['price'].to_list()
costs = df['costs'].to_list()

print('Sorted by avg costs:')
print(' avg_price',avg_price,'\n','avg_costs',avg_costs,'\n','std_dev_price',std_dev_price,'\n','std_dev_costs',std_dev_costs,'\n')

print('Full Dataframe:')
print(df)

输出(对齐)

 Start:
 avg_price     [10, 3, 5, 5, 8]
 avg_costs     [8,  3, 5, 9, 4]
 std_dev_price [1,  2, 1, 1, 2]
 std_dev_costs [1,  1, 2, 2, 1]
 
 Sorted by avg costs:
 avg_price     [5, 10, 5, 8, 3]
 avg_costs     [9, 8,  5, 4, 3]
 std_dev_price [1, 1,  1, 2, 2]
 std_dev_costs [2, 1,  2, 1, 1]

 Full Datframe:
   avg_price  avg_costs  std_dev_price  std_dev_costs                                              price                                              costs
3          5          9              1              2  [2.5092028090378355, 4.81567722966441, 5.49058...  [10.563731356333232, 6.647727831982642, 8.0096...
0         10          8              1              1  [9.341336323005978, 9.810670988947805, 10.7077...  [7.339563107482252, 8.790936460961769, 8.40626...
2          5          5              1              2  [5.656265155737828, 4.975811559532342, 6.49261...  [1.6639841191325848, 3.691022076817463, 7.0424...
4          8          4              2              1  [7.868428684276111, 8.65633376629758, 11.67775...  [4.141047169505752, 4.25009712746727, 2.993419...
1          3          3              2              1  [2.920446641165024, 3.958967186635695, 3.31161...  [3.5024403403983557, 3.7703884020352803, 2.708...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 2022-10-15
    • 2021-01-23
    • 1970-01-01
    相关资源
    最近更新 更多