如何从基于另一列的数据框中的列连接唯一字符串

时间:2019-08-08 22:47:19

标签: python pandas

我需要根据另一列中的值在一列中连接唯一字符串。

我尝试了groupby,但是要么我遗漏了一些明显的东西,要么这太过分了。

下面是输入数据帧。我想为col2中的每个值加入col1中的唯一字符串

df = pd.DataFrame([
    ['a', '', 1],
    ['a', 's2', 2],
    ['a', 's2', 3],
    ['a', 's3', 3],
    ['b', '', 4],
    ['b', 's1', 5],
    ['c', '', 6]],
  columns=['col1', 'col2', 'col0'])

我正在寻找这样的输出:

df2 = pd.DataFrame([
    ['a', '', 1, 's2;s3'],
    ['a', 's2', 2, 's2;s3'],
    ['a', 's2', 3, 's2;s3'],
    ['a', 's3', 3, 's2;s3'],
    ['b', '', 4, 's1'],
    ['b', 's1', 5, 's1'],
    ['c', '', 6, '']],
  columns=['col1', 'col2', 'col0', 'col_out'])

我尝试使用transform,但是这些都不提供正确的列。我不拘泥于groupby,transform,只要能正常工作,任何其他方法都可以。

df['col3'] = df.groupby('col1')['col2'].transform(lambda x: ';'.join(x))
df['col4'] = df.groupby('col1', as_index=False)['col2'].transform(lambda x: list(set(x)))
df['col5'] = df['col4'].str.join(';')

1 个答案:

答案 0 :(得分:1)

我认为您距离很近,请在此处添加strip

df2['col_out2'] = df2.groupby('col1')['col2'].transform(lambda x: ';'.join(x.unique())).str.strip(';')

它的输出是:

  col1 col2 col0 col_out col_out2
0   a        1   s2;s3   s2;s3
1   a   s2   2   s2;s3   s2;s3
2   a   s2   3   s2;s3   s2;s3
3   a   s3   3   s2;s3   s2;s3
4   b        4   s1      s1
5   b   s1   5   s1      s1
6   c        6