按常用日期对数组数据进行排序

问题描述:

我有一个包含许多行和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,但我已搜查了不少与解决方案没有成功。我的大部分搜索结果都让我相信,使用熊猫(我没有使用过)或numpy(我已经使用过)可能会有一种简单的方法来做到这一点。

任何建议将不胜感激。我正在使用Python 3.6。

使用熊猫!

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) 
+0

哇 - 太棒了!我一定要读熊猫 - 这么简单而强大。非常感谢您的解决方案。 – CodingNewb

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

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])部分执行orde戒指

+0

谢谢你的回复。我将与熊猫解决方案一起使用,但我仍然希望更好地理解您的代码,因为我是学习Python的新手。我运行这行代码的一个问题是输出的格式正确(即唯一的日期后跟一个名称列表),但名称不是按销售排序的。有没有办法将这个功能添加到你的代码?谢谢! – CodingNewb