在 pandas 中,如何获得 nth() 的版本来充当聚合器?

问题描述 投票:0回答:1

在 Pandas v1.x.x 中,

df.groupby("col").nth(0)

返回一个以“col”作为索引 col 的数据框。

现在在 pandas v2.x.x 中则不然,我对原因的理解是 nth 现在被视为“过滤器”而不是“聚合器”。

我看到一些建议我这样做的帖子

 df.groupby("col").nth(0).reset_index().set_index("col")

如果我想要一个以“col”为索引的结果。这让我觉得很疯狂,而且重复了代码,因为我必须说两次“col”。

有没有更好、更干净的方法来做到这一点? 如果向后兼容,则可获得奖励积分。

python pandas
1个回答
0
投票

正如评论中所建议的,最简单的方法是将列设置为索引:

df = pd.DataFrame({'col': [1, 1, 2, 1, 2],
                   'val': [np.nan, 2, 3, 4, 5]})

df.set_index('col').groupby(level=0).nth(0)

     val
col     
1    NaN
2    3.0

groupby.nth
确实not表现得像聚合函数,而是像过滤器。它可以收集多个值(保留原始索引是有意义的):

df.groupby('col').nth([0, 1])

   col  val
0    1  NaN
1    1  2.0
2    2  3.0
4    2  5.0

将 col 设置为索引会导致重复索引:

df.set_index('col').groupby(level=0).nth([0,1])

     val
col     
1    NaN
1    2.0
2    3.0
2    5.0

错误报告中明确讨论了这一点#55334

请注意,对于

nth(0)
的具体情况,您可以使用:

df.groupby('col').first()
© www.soinside.com 2019 - 2024. All rights reserved.