将给定列中具有相同值的pandas DataFrame(具有多列)的所有行分组

时间:2018-03-21 11:26:01

标签: python pandas dataframe data-analysis

我一直在搜索几个小时。我有一个像这样的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)的列,然后我将对DataFrame执行情感分析。

1 个答案:

答案 0 :(得分:2)

您可以使用:

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

<强>解释

  1. 首先按astype
  2. 将所有列投放到string s
  3. 然后groupbyagg
  4. 汇总join
  5. 如果还需要col1上的第一个值添加drop_duplicates