按共同日期排序数组数据

时间:2017-06-12 17:13:03

标签: python arrays python-3.x numpy

我有一个包含许多行和3列的.csv文件:Date,Rep和Sales。我想使用Python生成一个新数组,该数组按日期对数据进行分组,并且对于给定日期,按销售额对Reps进行排序。例如,我的输入数据如下所示:

salesData = [[201703,'Bob',3000], [201703,'Sarah',6000], [201703,'Jim',9000], 
    [201704,'Bob',8000], [201704,'Sarah',7000], [201704,'Jim',12000], 
    [201705,'Bob',15000], [201705,'Sarah',14000], [201705,'Jim',8000],
    [201706,'Bob',10000], [201706,'Sarah',18000]]

我想要的输出如下:

sortedData = [[201703,'Jim', 'Sarah', 'Bob'], [201704,'Jim', 'Bob', 
    'Sarah'], [201705,'Bob', 'Sarah', 'Jim'], [201706, 'Sarah', 'Bob']]

我是Python的新手,但我已经搜索了一些没有成功的解决方案。我的大多数搜索结果都让我相信使用pandas(我没有使用过)或numpy(我已经使用过)可能有一种简单的方法。

任何建议都将不胜感激。我使用的是Python 3.6。

2 个答案:

答案 0 :(得分:2)

使用熊猫!

import pandas as pd

salesData = [[201703, 'Bob', 3000], [201703, 'Sarah', 6000], [201703, 'Jim', 9000],
             [201704, 'Bob', 8000], [201704, 'Sarah', 7000], [201704, 'Jim', 12000],
             [201705, 'Bob', 15000], [201705, 'Sarah', 14000], [201705, 'Jim', 8000],
             [201706, 'Bob', 10000], [201706, 'Sarah', 18000]]

sales_df = pd.DataFrame(salesData)
result = []
for name, group in sales_df.groupby(0):
    sorted_df = group.sort_values(2, ascending=False)
    result.append([name] + list(sorted_df[1]))
print(result)

答案 1 :(得分:0)

没有熊猫,你可以尝试这一行答案:

sortedData = [[i]+[item[1] for item in salesData if item[0]==i] for i in sorted(set([item[0] for item in salesData]))]

<小时/> 修改
您可以按销售顺序对每个内部列表进行排序:

sortedData = [[i]+[item[1] for item in sorted(salesData, key=lambda x: -x[2]) if item[0]==i] for i in sorted(set([item[0] for item in salesData]))]

请注意,sorted(salesData, key=lambda x: -x[2])部分执行排序