我有一个对象,它是我通过执行groupby(
"A“、"B”
结合熊猫中的.nlargest(3)函数。
即:
df.groupby(["A", "B"])["Column"].nlargest(3).reset_index().unstack()现在我对每个"A“和"B”都有3个值。我做了一个解栈,它工作了,但我达到了内存容量,它有时会崩溃。
我记得很久以前我找到了这个问题的(内置)解决方案,但再也找不到了。很抱歉,如果这是一个副本,并提前感谢!
发布于 2021-03-01 05:04:40
据我所知,
在做好一些初步准备后应该会有所帮助
创建数据:
import numpy as np
np.random.seed(2021)
df = pd.DataFrame({'A':np.random.randint(1,3,15), 'B':np.random.randint(1,3,15), 'C':np.random.normal(0,1,15)})
df看起来像这样
A B C
0 1 1 2.044890
1 2 1 1.075268
2 2 1 0.079020
3 1 1 0.493282
4 2 1 -0.791367
5 1 2 -2.130595
6 1 2 0.317206
7 1 2 -1.364617
8 2 2 0.358428
9 1 1 -1.305624
10 2 2 2.020718
11 2 1 -2.686804
12 2 2 0.557872
13 2 1 0.776176
14 1 1 0.202650然后我们选择3个最大的,
使用
要指定排名,并在排名上进行枢轴操作,请执行以下操作:
df2 = df.groupby(["A", "B"])["C"].nlargest(3).reset_index()
df2['rank'] = df2.groupby(["A", "B"]).cumcount()
pd.pivot_table(df2, values = 'C', index = ['A','B'], columns = 'rank')这产生了
rank 0 1 2
A B
1 1 2.044890 0.493282 0.202650
2 0.317206 -1.364617 -2.130595
2 1 1.075268 0.776176 0.079020
2 2.020718 0.557872 0.358428如果这就是你想要的,如果它能在内存方面工作,请让我知道
https://stackoverflow.com/questions/66411797
复制相似问题