在dplyr中等效于filter的熊猫,后跟groupby函数

时间:2020-07-04 11:55:15

标签: python r pandas

数据帧df中有1000行50列。 R的dplyr中的以下代码会产生1000 * 50的小标题和ID [1000],因为此df中有1000个不同的ID。

df1 = df %>% group_by(ID) %>% filter(row_number()==n())

我想在Pandas中执行相同的代码,结果应该是一个数据帧。我在Pandas中使用groupby命令获得了分组:

df_groups = df.groupby(by=['ID'])

此步骤后如何获得df1?得到df1后,下一步就是从另一个数据帧中再添加一列。

2 个答案:

答案 0 :(得分:3)

如果我理解正确,filter语句将返回每个组的最后一行,在这种情况下,我相信您可能正在寻找:

df1 = df.groupby('ID').last()

答案 1 :(得分:1)

使用 datar 很容易做到,无需学习 Pandas API:

>>> from datar.datasets import mtcars
>>> from datar.all import f, group_by, row_number, n, filter
>>> mtcars >> group_by(f.cyl) >> filter(row_number() == n())
        mpg     cyl      disp      hp      drat        wt      qsec      vs      am    gear    carb
  <float64> <int64> <float64> <int64> <float64> <float64> <float64> <int64> <int64> <int64> <int64>
0      19.7       6     145.0     175      3.62      2.77      15.5       0       1       5       6
1      15.0       8     301.0     335      3.54      3.57      14.6       0       1       5       8
2      21.4       4     121.0     109      4.11      2.78      18.6       1       1       4       2

[Groups: cyl (n=3)]

我是包的作者。如果您有任何问题,请随时提交问题。