【发布时间】:2018-11-26 17:02:59
【问题描述】:
value Group something
0 a 1 1
1 b 1 2
2 c 1 4
3 c 2 9
4 b 2 10
5 x 2 5
6 d 2 3
7 e 3 5
8 d 2 10
9 a 3 5
我想选择每个组的最后 3 行(来自上面的 df),如下所示,但使用 Inplace 执行操作。我想确保在分配后只将新的 df 对象保留在内存中。什么是一种有效的方法?
df = df.groupby('Group').tail(3)
结果应如下所示:
value Group something
0 a 1 1
1 b 1 2
2 c 1 4
5 x 2 5
6 d 2 3
7 e 3 5
8 d 2 10
9 a 3 5
N.B:- 这个问题与Keeping the last N duplicates in pandas 有关
【问题讨论】:
-
为什么不想用你用的作为例子(
df = df.groupby('Group').tail(3))?您不能进行就地分组,因为分组的数据框是一个完全不同的对象。 -
当你覆盖它时只有新的..
-
@gibbz00 也适用于当前的公式。一旦不再有活动引用,Python 的垃圾回收器就会处理旧的垃圾回收器。
-
@gibbz00 给输出 df 一个新名称 (
df_grouped = df.groupby('Group').tail(3)) 意味着df仍然引用旧数据框,而df_grouped引用新数据框。现在它们都将存储在内存中。 -
如果您不想覆盖,最好分配新的列名,例如
df['new_col'] = df.groupby('Group').tail(3)?