【问题标题】:Sorting array data by common date按常用日期对数组数据进行排序
【发布时间】:2017-06-12 17:13:03
【问题描述】:

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

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。

【问题讨论】:

    标签: python arrays python-3.x numpy


    【解决方案1】:

    使用熊猫!

    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)
    

    【讨论】:

    • 哇——太棒了!我肯定需要阅读熊猫 - 如此简单而强大。非常感谢您的解决方案。
    【解决方案2】:

    不用pandas,你可以试试这行答案:

    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]) 部分执行排序

    【讨论】:

    • 感谢您的回复。我将使用 pandas 解决方案,但我仍然想更好地理解您的代码,因为我是学习 Python 的新手。我运行这行代码时遇到的一个问题是输出格式正确(即,唯一日期后跟名称列表),但名称未按销售额排序。有没有办法将此功能添加到您的代码中?谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-02-23
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 2014-10-19
    相关资源
    最近更新 更多