【问题标题】:Pandas Multi-index DataFrame: aggregate sub-groups within groupsPandas Multi-index DataFrame:聚合组内的子组
【发布时间】:2021-07-24 16:48:17
【问题描述】:

我有以下多索引 DataFrame:

df = pd.DataFrame({
      'cluster': [1, 1, 2, 1, 2, 2, 1, 3, 2],
      'mark': [8, 5, 10, 20, 4, 1, 6, 4, 1],
      'dt': ['2021-03-23', '2021-03-25', '2021-03-23', '2021-03-28', '2021-03-25', '2021-03-28', '2021-03-29', '2021-03-23', '2021-03-31']
})
df.set_index(['cluster', 'dt'], inplace=True)
df.sort_index(inplace=True)
df
标记 集群 dt 1 2021-03-23 8 2021-03-25 5 2021-03-28 20 2021-03-29 6 2 2021-03-23 10 2021-03-25 4 2021-03-28 1 2021-03-31 1 3 2021-03-23 4

我要做的是在每个索引组内生成每周子组的总和,类似于

总分 集群 start_date_of_week 1 2021-03-21 13 2021-03-28 26 2 2021-03-21 14 2021-03-28 2 3 2021-03-23 4

我知道如何根据日期时间索引的频率生成组。我不知道如何使用一级多索引来做到这一点。有什么想法吗?

【问题讨论】:

    标签: pandas group-by aggregate multi-index


    【解决方案1】:

    确保索引的级别 1 是日期时间类型。然后你可以这样做:

    print(
        df.groupby(
            [
                pd.Grouper(level=0),
                pd.Grouper(level=1, freq="W", label="left", closed="left"),
            ]
        )["mark"]
        .sum()
        .to_frame()
    )
    

    打印:

                        mark
    cluster dt              
    1       2021-03-21    13
            2021-03-28    26
    2       2021-03-21    14
            2021-03-28     2
    3       2021-03-21     4
    

    【讨论】:

      猜你喜欢
      • 2020-02-11
      • 2021-05-05
      • 2016-06-24
      • 2019-07-03
      • 2019-03-24
      • 2019-09-03
      • 2018-10-01
      • 1970-01-01
      相关资源
      最近更新 更多