gpt4 book ai didi

python - 在 pandas 数据框列中查找最高值的更有效方法

转载 作者:太空宇宙 更新时间:2023-11-03 16:39:48 24 4
gpt4 key购买 nike

我有一个包含两列 x 和 y 的 df 。 y 列是 x 值的累加计数。 x 值具有不同的计数。如何在不迭代行的情况下获得每个 x 的前两个 y 计数的结果 df 。

示例 df:

df = pd.DataFrame({"x": [101, 101, 101, 101, 201, 201, 201, 405, 405], "y": [1, 2, 3, 4, 1, 2, 3, 1, 2]})

x y
0 101 1
1 101 2
2 101 3
3 101 4
4 201 1
5 201 2
6 201 3
7 405 1
8 405 2

期望的结果:

x      y
101 3
101 4
201 2
201 3
405 1
405 2

最佳答案

你可以这样做:

In [35]:
df.loc[df.groupby(['x'])['y'].apply(lambda x: x.iloc[-2:]).index.get_level_values(1)]

Out[35]:
x y
2 101 3
3 101 4
5 201 2
6 201 3
7 405 1
8 405 2

因此,这个 groupby 在“x”列上并返回最后 2 个值,假设 df 已经按照您所示进行了排序。这会生成一个具有多重索引的 df,并且第二级值可用于通过使用 get_level_values

索引回原始 df

编辑

要回答您的评论,您可以再次 groupby 并使用 transformrank 将值重置为 12:

In [51]:
df1 = df.loc[df.groupby(['x'])['y'].apply(lambda x: x.iloc[-2:]).index.get_level_values(1)]
df1['y'] = df1.groupby('x')['y'].transform(lambda x: x.rank(method='first'))
df1

Out[51]:
x y
2 101 1
3 101 2
5 201 1
6 201 2
7 405 1
8 405 2

关于python - 在 pandas 数据框列中查找最高值的更有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36917140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com