Pandas groupby 应用列表 - 确保它保留顺序

Pandas groupby apply list - Ensure it preserves order

我对 pandas 有点陌生,运行 进入以下代码行

df.groupby(by=['id']).agg(lambda x: list(x))

这里df

   id var_x var_y
0   1   xe  ye
1   1   xb  yb
2   1   xc  yc
3   2   xd  yd
4   3   xe  ye
5   1   xa  ya
6   2   xf  yf

它给出了(预期的)结果

       var_x                 var_y
id      
1   [xe, xb, xc, xa]    [ye, yb, yc, ya]
2           [xd, xf]            [yd, yf]
3               [xe]                [ye]

问题是我们能否确保每个变量的聚合共享相同的顺序? 例如。对于 id=1,有什么办法可以解释我们不会有 [xe, xb, xc, xa][ya, ye, yc, yb] 而不是 [xe, xb, xc, xa][ye, yb, yc, ya]

简答

是的,订单有保障

文档

groupby 的文档表明您可以对 进行排序,但在任何情况下 行的顺序都会被保留.

sortbool, default True

Sort group keys. Get better performance by turning this off. Note this does not influence the order of observations within each group. Groupby preserves the order of rows within each group.

详情

groupby.agg 将整个 Series 逐组传递给聚合函数,然后对下一列进行相同操作。

您可以通过 运行 print:

查看
df.groupby(by=['id']).agg(print)

0    xe
1    xb
2    xc
5    xa
Name: var_x, dtype: object
3    xd
6    xf
Name: var_x, dtype: object
4    xe
Name: var_x, dtype: object
0    ye
1    yb
2    yc
5    ya
Name: var_y, dtype: object
3    yd
6    yf
Name: var_y, dtype: object
4    ye
Name: var_y, dtype: object
列表中的顺序

这相当于每个已处理系列的 运行 list(Series)list 不修改传递的iterable的顺序,所以顺序被保留。