在 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”。
有没有更好、更干净的方法来做到这一点? 如果向后兼容,则可获得奖励积分。
正如评论中所建议的,最简单的方法是将列设置为索引:
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()