在 groupby (Multiindex) 之后从每个组中选择第一行

Posted

技术标签:

【中文标题】在 groupby (Multiindex) 之后从每个组中选择第一行【英文标题】:Select the first row from each group after groupby (Multiindex) 【发布时间】:2021-06-14 06:01:01 【问题描述】:

我正在做数据分析,并进行 groupby 以获取“年份”和“产品”的“计数”和“总和”(已经按每年的计数排序)

df 是这样的:

count sum
year product
2015 product A 9 23
product 5 46
2016 product A 7 17
product B 7 42
product C 3 78
2017 product B 9 32
product C 8 24
product A 1 72
2018 product A 3 33
product B 1 82

'year' 和 'product' 是索引,'count' 和 'sum' 是 agg 列。

我想检索每年的最大计数(第一行)。

结果会是这样的

count sum
year product
2015 product A 9 23
2016 product A 7 17
2017 product B 9 32
2018 product A 3 33

我该如何处理?

谢谢

【问题讨论】:

请以代码的形式分享您的数据(因为您的数据是 MultiIndex,所以容易得多) 【参考方案1】:

要从每一年中选择第一行,您可以:

print(
    df.reset_index(level="product")
    .groupby(level="year")
    .first()
    .set_index(["product"], append=True)
)

打印:

                count  sum
year product              
2015 product A      9   23
2016 product A      7   17
2017 product B      9   32
2018 product A      3   33

【讨论】:

以上是关于在 groupby (Multiindex) 之后从每个组中选择第一行的主要内容,如果未能解决你的问题,请参考以下文章

带有 pandas groupby multiindex 的箱线图,用于来自 multiindex 的指定子级别

如何在 MultiIndex Groupby 中高效地执行乘法

不同长度的pandas groupby元组-ValueError:在通过级别中找不到值:MultiIndex

Pandas Multiindex 和 Groupby 返回奇怪的行为

Pandas Multiindex Groupby 聚合列与另一列的值

Pandas Groupby Plotting MultiIndex 按***分组