假设我有以下数据集:
uid iid val
1 1 2
1 2 3
1 3 4
1 4 4.5
1 5 5.5
2 1 3
2 2 3
2 3 4
3 4 4.5
3 5 5.5
根据这些数据,我想首先按 uid 进行分组,然后从每个 uid 中获取最后 20% 的行数。
也就是说,由于 uid=1 有 5 行,所以我想从 uid=1 获取最后 1 行(5 行的 20%)。
以下是我想做的事情:
df.groupby('uid').tail([20% of each uid])
有人可以帮助我吗?
最佳答案
您可以尝试将自定义函数应用于groupby
对象。在函数内部计算应获取多少行,并使用该行数获取组的 tail
。 int
向 0 舍入,因此任何少于 5 行的组都不会为结果贡献任何行。
df.groupby('uid').apply(lambda x: x.tail(int(0.2*x.shape[0])))
关于python - Pandas 在 groupby 之后获取行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43448895/