在 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 返回奇怪的行为