python - 根据条件合并相邻行

标签 python pandas pandas-groupby

我已经尝试过有关此主题的其他帖子,但似乎找不到正确的解决方案。

我有一个数据框,它描述了由说话者分隔的对话:

import pandas as pd
data = [[1, 'hello'], [2, 'hi there'], [1, 'how are you?'],[2, 'i am well'], [2, 'how are you?']] 
df = pd.DataFrame(data, columns = ['speaker', 'turn']) 

我要做的是合并存在相同扬声器标签的相邻行。换句话说,我希望能够合并最后两行,因为它们都应该算作同一个对话回合。

data = [[1, 'hello'], [2, 'hi there'], [1, 'how are you?'],[2, 'i am well', 'how are you?']

我怀疑答案与 groupby 函数有关,但到目前为止我尝试让它工作但没有奏效。

最佳答案

Pandas 中的字符串处理不当;这些操作可能看起来 是矢量化的,但实际上并非如此。在任何情况下,您要做的就是在此阶段聚合列表,并且该格式也不太适合您期望标量值的 df。使用 itertools.groupby

import itertools

from operator import itemgetter


data = [[1, 'hello'], [2, 'hi there'], [1, 'how are you?'],[2, 'i am well'], 
        [2, 'how are you?']] 

rebuilt_list = []
for speaker, comment_group in itertools.groupby(data, itemgetter(0)):

    comments = [speaker] # To make sure you have the speaker id as first value

    for comment in comment_group:
        comments.extend(comment[1:])

    rebuilt_list.append(comments)

关于python - 根据条件合并相邻行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59195992/

相关文章:

python - Pandas :如何在groupby之后获得特定的群体?

python - 微分运算符可用于矩阵形式,在 Python 模块 Sympy 中

python-3.x - 随机样本集,用于根据标签创建交叉验证和训练集

python - 从物理公式(无数据文件)、python 和 numpy 绘制图形

python - 使用对单个元素进行操作的 lambda 表达式来过滤 pandas 系列

python - 根据 pandas 中的情况替换某些值

pandas - 跨多索引级别应用带有参数的函数

python - 在 Pandas 中找到第一个非 NaN 值

python - 为什么在 selenium 测试中使用 'easyprocess' 时会得到 'pyvirtualdisplay' 输出?

python - 实现随机滚动表的Pythonic方法有哪些?