【问题标题】:groupby on Dask dataframe then sort by one column在 Dask 数据帧上分组,然后按一列排序
【发布时间】:2020-04-17 19:42:18
【问题描述】:

想象一个包含两列的简单 Dask 数据集: - 交易日期 - 交易金额

我只想知道如何按交易日期分组并显示每天的交易数量。我想要按交易日期或计数排序的结果数据框。 这是我的代码:

df = taxi_data.Date.value_counts().compute()

输出如下所示: 2019-01-25 291288 2019-01-11 290607 2019-01-31 283724 2019-01-17 283409 2019-01-24 280805 2019-01-10 280648 Name: Date, dtype: int64

问题是如何按第一列排序?

【问题讨论】:

    标签: pandas-groupby dask


    【解决方案1】:

    一种方法是在sort_index compute之后调用。

    taxi_data.Date.value_counts().compute().sort_index()
    

    现在(在value_counts之后)结果比较小,所以不需要 在 dask 级别对其进行排序。

    另一种选择(无论如何要在 dask 级别进行)是:

    • 转换为 DataFrame(单列),
    • 重置索引,使索引成为常规列(这个新的 列默认命名为 index),
    • 将索引设置回index列,这是排序的时刻 实际发生,
    • (可选)挤压将其转换回系列
    • 计算结果。

    所以整个代码可以是:

    taxi_data.Date.value_counts().to_frame()\
        .reset_index().set_index('index').squeeze().compute()
    

    【讨论】:

    • 这是一个很棒的解决方案。还有一个问题——如果我想按计数列而不是日期列排序怎么办?我是否需要命名该列,然后将 set_index 设置为该列?
    • 我认为采用我的第一种方法更容易(也更自然)。所以在 value_counts().compute() 之后,结果是一个“pandasonic”Series,所以你可以使用任何你想要的 Pandas 方法。在这种情况下: 1. 如果您想要 降序 排序,则不需要任何操作(您现在有降序排序)。 2. 如果要升序排序,调用sort_values()就足够了。
    猜你喜欢
    • 2020-12-14
    • 2021-11-24
    • 2020-11-11
    • 2018-07-06
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    相关资源
    最近更新 更多