连接具有相同id的pandas DataFrame行

Ale*_*lex 8 python dataframe pandas

说我有一个pandas DataFrame,例如:

   A  B  id
0  1  1   0
1  2  1   0
2  3  2   1
3  0  2   1
Run Code Online (Sandbox Code Playgroud)

假设我想组合具有相同id的行,以便行中的其他元素放在一个列表中,以便上面的数据帧将变为:

     A       B     id
0  [1, 2]  [1, 1]   0
1  [3, 0]  [2, 2]   1
Run Code Online (Sandbox Code Playgroud)

作为前两行,最后两行具有相同的id.大熊猫有功能吗?我知道pandas groupby命令,但我希望返回类型也是一个数据帧.谢谢.

Ant*_*pov 12

您可以使用groupbypandas 系列的groupby agg方法和tolist方法:

In [762]: df.groupby('id').agg(lambda x: x.tolist())
Out[762]: 
         A       B
id                
0   [1, 2]  [1, 1]
1   [3, 0]  [2, 2]
Run Code Online (Sandbox Code Playgroud)

groupby 根据需要返回Dataframe:

In [763]: df1 = df.groupby('id').agg(lambda x: x.tolist())

In [764]: type(df1)
Out[764]: pandas.core.frame.DataFrame
Run Code Online (Sandbox Code Playgroud)

要完全符合您的预期的结果,你可以做另外reset_index也可以使用as_index=False在groupby:

In [768]: df.groupby('id', as_index=False).agg(lambda x: x.tolist())
Out[768]: 
   id       A       B
0   0  [1, 2]  [1, 1]
1   1  [3, 0]  [2, 2]

In [771]: df1.reset_index()
Out[771]: 
   id       A       B
0   0  [1, 2]  [1, 1]
1   1  [3, 0]  [2, 2]
Run Code Online (Sandbox Code Playgroud)