python - Pandas 在 groupby 之后获取行

标签 python pandas dataframe group-by

假设我有以下数据集:

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对象。在函数内部计算应获取多少行,并使用该行数获取组的 tailint 向 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/

相关文章:

python - BeautifulSoup 在带有反斜杠的路径上卡住了

python - 如何用 Pandas 计算协方差矩阵

python - Pyspark:dataframe describe() 和 summary() 是如何实现的

python - 在不创建组合产品的情况下取消嵌套 Pandas 系列

python - sys.stdout.write 和\r 回车不工作

python - 使用反汇编器调试Python错误

javascript - 如何使用 d3 过滤器和更新功能在数据选择之间切换

python - HDFStore 附加错误 - "Cannot serialize the column"

python - 使用 pandas 选择数据的问题。国际劳工组织

python - pandas diff() 为一阶差分给出 0 值,我想要实际值