数据帧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
后,下一步就是从另一个数据帧中再添加一列。
答案 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)]
我是包的作者。如果您有任何问题,请随时提交问题。