在groupby之后使用数据框列连接另一列的值

Cle*_*leb 3 python dataframe pandas

我有一个这样的数据框:

import pandas as pd

df = pd.DataFrame(
    {
        'group': list('ABBCA'),
        'values': list('xyztr'),
        'joiner': ['j1', 'j2', 'j2', 'j3', 'j1']
    }
)

  group values joiner
0     A      x     j1
1     B      y     j2
2     B      z     j2
3     C      t     j3
4     A      r     j1
Run Code Online (Sandbox Code Playgroud)

现在,我想对列进行分组,groupvalues使用中的条目来加入相应的值joiner。所以像这样:

df.groupby('group')['values'].transform(" - ".join)

0    x - r
1    y - z
2    y - z
3        t
4    x - r
Run Code Online (Sandbox Code Playgroud)

只是" - "它应该使用中的相应值df['joiner']

我该怎么做?

预期结果将是:

0    x j1 r
1    y j2 z
2    y j2 z
3        t
4    x j1 r
Run Code Online (Sandbox Code Playgroud)

我们可以安全地假定该joiner值与该group列一致(否则groupby将失败)。

ank*_*_91 6

这是一种方法:

m=df.groupby('group').agg({'values':list,'joiner':'first'})
s=pd.Series([f' {b} '.join(a) for a,b in zip(m['values'],m['joiner'])],index=m.index)
final=df.assign(new=df.group.map(s))
Run Code Online (Sandbox Code Playgroud)
  group values joiner     new
0     A      x     j1  x j1 r
1     B      y     j2  y j2 z
2     B      z     j2  y j2 z
3     C      t     j3       t
4     A      r     j1  x j1 r
Run Code Online (Sandbox Code Playgroud)


raf*_*elc 5

使用映射器和 pd.Series.str.cat

mapper = df.set_index('group').joiner.to_dict()
df.groupby('group').values.transform(lambda s: s.str.cat(sep=f' {mapper[s.name]} '))
Run Code Online (Sandbox Code Playgroud)
  group values joiner  joined
0     A      x     j1  x j1 r
1     B      y     j2  y j2 z
2     B      z     j2  y j2 z
3     C      t     j3       t
4     A      r     j1  x j1 r
Run Code Online (Sandbox Code Playgroud)