使用Pandas groupby将几行的字符串连接起来

  • Post category:Python

首先,我们需要先导入Pandas库:

import pandas as pd

然后,我们构造一份示例数据:

data = {'group': ['A', 'B', 'A', 'B', 'A', 'B'],
        'str': ['hello', 'world', 'foo', 'bar', 'aaa', 'bbb']
       }
df = pd.DataFrame(data)

数据包含两列:group列和str列。现在我们要将同一组(group)的所有字符串(str)连接起来,生成一列新的列(concat_str)。

实现这个功能,我们需要使用groupby()和agg()函数。groupby()可以按照一列或多列的不同值把数据分为不同的组;agg()函数提供了多种功能,可以对不同组的数据执行不同的聚合操作。

我们对示例数据进行如下处理:

df['concat_str'] = df.groupby('group')['str'].transform(lambda x: ' '.join(x))
df_agg = df.groupby('group').agg({'str': list, 'concat_str': 'first'})

首先,我们使用groupby()函数将数据按照group列的不同值分为两组,然后对每一组的str列使用transform()函数,将同一组的字符串连接起来。transform()函数的参数是一个函数,这里我们使用lambda表达式传入了join()函数,将同一组的字符串按照空格连接起来。

然后,我们再次使用groupby()函数将数据按照group列的不同值分为两组,同时使用agg()函数对每一组的str列和concat_str列进行聚合操作。agg()函数的参数是一个字典,定义了对每一列要执行的聚合操作。这里我们使用list将每一组的str列聚合成一个列表,使用’first’将每一组的concat_str列聚合成第一个值。

最终,我们得到了如下的结果:

  group    str      concat_str
0     A  hello  hello foo aaa
1     B  world  world bar bbb
2     A    foo  hello foo aaa
3     B    bar  world bar bbb
4     A    aaa  hello foo aaa
5     B    bbb  world bar bbb

  str               concat_str
group                                 
A      [hello, foo, aaa]     hello foo aaa
B      [world, bar, bbb]     world bar bbb

其中,concat_str列是通过将同一组的字符串连接起来生成的,str列则是对每一组的字符串生成了一个列表。