Python 熊猫:将重复行的列分组到列表列中

Python 熊猫:将重复行的列分组到列表列中,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个熊猫数据框,看起来像这样: >>> df m event 0 3 1 1 1 1 2 1 2 3 1 2 4 2 1 5 2 0 6 3 1 7 2 2 8 3 2 9 3 1 我想根据m列将事件列的值分组到列表中,以便得到以下结果: >>&g

我有一个熊猫数据框,看起来像这样:

>>> df
       m  event
0      3      1
1      1      1
2      1      2
3      1      2
4      2      1
5      2      0
6      3      1
7      2      2
8      3      2
9      3      1
我想根据m列将事件列的值分组到列表中,以便得到以下结果:

>>> df
       m            events
0      3      [1, 1, 2, 1]
1      1      [1, 2, 2]
2      2      [1, 0, 2]
对于m的每个唯一值,应该有一行,以及属于m的所有事件的对应列表

我试过这个:

>>> list(df.groupby('m').event)
[(3, m_id
0    1
6    1
8    2
9    1
Name: event, dtype: int64), (1, m_id
1    1
2    2
3    2
Name: event, dtype: int64), (2, m_id
4    1
5    0
7    2
Name: event, dtype: int64)]
它有点像我想要的那样,它将事件分组在m之后。我可以通过一些循环将其推回到我想要的数据帧中,但我觉得我已经开始走上了一条丑陋的、不必要的复杂道路。如果m有数千个唯一的值,则速度会变慢

我可以使用Pandas方法以优雅的方式执行我想要的转换吗

如果events列可以包含(numpy)数组,这样我就可以直接对events行进行计算,比如
df[df.m==1]。events+100
,但常规列表也可以

In [320]: r = df.groupby('m')['event'].apply(np.array).reset_index(name='event')

In [321]: r
Out[321]:
   m         event
0  1     [1, 2, 2]
1  2     [1, 0, 2]
2  3  [1, 1, 2, 1]
奖金:

In [322]: r.loc[r.m==1, 'event'] + 1
Out[322]:
0    [2, 3, 3]
Name: event, dtype: object
你可以

In [1163]: df.groupby('m')['event'].apply(list).reset_index(name='events')
Out[1163]:
   m        events
0  1     [1, 2, 2]
1  2     [1, 0, 2]
2  3  [1, 1, 2, 1]
如果您不想排序
m

In [1164]: df.groupby('m', sort=False).event.apply(list).reset_index(name='events')
Out[1164]:
   m        events
0  3  [1, 1, 2, 1]
1  1     [1, 2, 2]
2  2     [1, 0, 2]

当然,我缺少的只是
apply(list)
!即使是数组,也很完美!
.reset\u index(name='event')
中的
(name='event')
的目的是什么?我在@krubo里没看到,