我一直在寻找小时。我有一个像这样的DataFrame:-

     col1.  col2.   col3.   col4
row1.  a.    p       u       0
row2.  b.    q       v       1
row3.  a.    r       w       2
row4.  d.    s       x       3
row5.  b.    t       y       4


现在,我想按“ col1”的值对所有这些行进行分组,以便得到:-

     col1.  col2.   col3.   col4
row1.  a.    p r     u w    0,2
row2.  b.    q t     v y    1,4
row3.  d.    s       x       3


现在我发现了一种df.groupby('col1)['col2'].apply(' '.join())将'col2'中的所有行按相同的'col1'分组的方法,但是我无法扩展上述命令,以便将所有列的所有行组合在一起以得到提及的输出较早。



上面的DataFrame只是为了说明。实际的DataFrame包括大约100行和列,并且所有单元格都存储反馈,但col1除外,col1存储了对其进行反馈的项目的名称。我想基于相同的项目(col1),然后我将对DataFrame进行情感分析。

最佳答案

您可以使用:

df1 = df.astype(str).groupby('col1').agg(','.join).reset_index()
print (df1)
  col1 col2 col3 col4
0   a.  p,r  u,w  0,2
1   b.  q,t  v,y  1,4
2   d.    s    x    3


如果需要还可以索引:

df1 = df.astype(str).groupby('col1').agg(','.join).reset_index()
df1.index = df.drop_duplicates('col1').index
print (df1)
      col1 col2 col3 col4
row1.   a.  p,r  u,w  0,2
row2.   b.  q,t  v,y  1,4
row4.   d.    s    x    3


说明:


首先通过string将所有列转换为astype
然后groupby并通过join汇总agg
如果需要,还可以通过col1上的第一个值进行索引,添加drop_duplicates

10-07 19:12
查看更多