Pandas基于一列值合并相邻的重复行,并在另一列中聚合字符串

2024-06-17 10:39:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把相邻的消息合并成一行

举个例子,

Name   Message
A      hi
A      how are you
B      find , and you ?
A      good
A      have you finished the homework

我想要的是这样的

Name   Message
A      hi how are you
B      find , and you ?
A      good have you finished the homework    

这可以用groupby()来完成吗


Tags: andthenameyou消息messagehavefind
1条回答
网友
1楼 · 发布于 2024-06-17 10:39:02

我们可以group重复行的相邻块上的数据帧,并使用firstMessage使用.join聚合Name

b = df['Name'].ne(df['Name'].shift()).cumsum()
df.groupby(b, as_index=False).agg({'Name': 'first', 'Message': ' '.join})

解释

ShiftName列向下移动一个单位,然后将移位列与未移位列进行比较,以创建布尔掩码,该掩码可用于标识相邻重复行之间的边界

>>> df['Name'].ne(df['Name'].shift())

0     True
1    False
2     True
3     True
4    False
Name: Name, dtype: bool

现在,在上面的布尔掩码上取累积的和,以标识列Name中的值保持不变的行块

>>> df['Name'].ne(df['Name'].shift()).cumsum()

0    1
1    1
2    2
3    3
4    3
Name: Name, dtype: int64

然后group使用firstMessage使用.join在上述识别块上的数据帧和聚合列Name

  Name                              Message
0    A                       hi how are you
1    B                     find , and you ?
2    A  good have you finished the homework

相关问题 更多 >