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里没看到,