按常用日期对数组数据进行排序
问题描述:
我有一个包含许多行和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)
答
编辑:
为此,您可以订购的销售每个内部列表:
没有熊猫,你可以试试这个一行答案:
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
哇 - 太棒了!我一定要读熊猫 - 这么简单而强大。非常感谢您的解决方案。 – CodingNewb