将多个列值合并为一列以获取python pandas中的重复行

时间:2019-04-08 17:26:45

标签: python pandas list dataframe row

我有一个这样的熊猫数据框:

     Col1       Col2

 0    a        Jack     
 1    a        Jill     
 2    b        Bob     
 3    c        Cain     
 4    c        Sam     
 5    a        Adam     
 6    b        Abel  

我现在要做的是将第2列中的值与第1列中的每个值合并,即输出应如下所示:

     Col1     Col2

0     a      Jack, Jill, Adam
1     b      Bob, Abel
2     c      Cain, Sam

如何最好地解决这个问题?任何意见将是有益的。预先感谢!

3 个答案:

答案 0 :(得分:1)

使用

df = df.groupby('Col1')['Col2'].apply(', '.join)

print(df)
Col1
a    Jack, Jill, Adam
b           Bob, Abel
c           Cain, Sam
Name: Col2, dtype: object

使用reset_index返回Col1作为列而不是索引

df = df.groupby('Col1')['Col2'].apply(', '.join).reset_index()

print(df)
  Col1              Col2
0    a  Jack, Jill, Adam
1    b         Bob, Abel
2    c         Cain, Sam

答案 1 :(得分:0)

您也可以像其他similar answer一样尝试以下操作:

new_df = df.groupby('Col1', as_index=False).agg(', '.join)

答案 2 :(得分:0)

这是另一种方法,请尝试一下:

df.groupby("Col1").agg(lambda x: ', '.join(x.unique())).reset_index()


  Col1              Col2
0    a  Jack, Jill, Adam
1    b         Bob, Abel
2    c         Cain, Sam

要记住的事情。如果您的数据集是这样的:

  Col1  Col2
0    a  Jack
1    a  Jill
2    b   Bob
3    c  Cain
4    c   Sam
5    a  Adam
6    b  Abel
7    a  Adam
8    c   Sam

您将获得以下输出:

df.groupby("Col1").agg(lambda x: ', '.join(x)).reset_index()


  Col1                    Col2
0    a  Jack, Jill, Adam, Adam
1    b               Bob, Abel
2    c          Cain, Sam, Sam

因此,使用unique可以删除Col2中的重复项。 希望有帮助