Python 快速合并熊猫中的行

Python 快速合并熊猫中的行,python,pandas,Python,Pandas,我试图为交易分析准备数据,但是原始数据有一个特性,即一些交易被分成多个部分(出于记账目的) 我需要把它们折叠成一行,我开始明白为什么很多人不喜欢在熊猫中迭代 我总共有120万行,需要向上折叠181000行。数据文件大小约为250 Mb 我需要对5列求和,并对第6列进行加权平均。总共有25列(因为我们希望能够深入分析各种属性) 明确地说,我基本上只是尝试对从SQL中提取的数据进行后处理 由于每行中的大部分数据都不是数字,groupby方法不可行,否则我将丢失大量信息(或者至少以后必须使用另一段代码

我试图为交易分析准备数据,但是原始数据有一个特性,即一些交易被分成多个部分(出于记账目的)

我需要把它们折叠成一行,我开始明白为什么很多人不喜欢在熊猫中迭代

我总共有120万行,需要向上折叠181000行。数据文件大小约为250 Mb

我需要对5列求和,并对第6列进行加权平均。总共有25列(因为我们希望能够深入分析各种属性)

明确地说,我基本上只是尝试对从SQL中提取的数据进行后处理

由于每行中的大部分数据都不是数字,groupby方法不可行,否则我将丢失大量信息(或者至少以后必须使用另一段代码将其分离并重新连接),我也不认为可以使用groupby进行加权平均

现在,我在需要折叠的索引上使用for循环,我对索引进行反向排序,以便行可以安全地向上折叠(例如,单个事务可能有5个重复行,因此向上折叠更容易,向上替换行1,而不是向下折叠)

所以,问题是我需要以多种方式顺序修改大量的行。我无法同时对多行进行操作,因为我正在尝试这样做,所以我认为矢量化在这种情况下不起作用

我想这个程序已经运行了大约50分钟了,虽然我机器的cpu是垃圾。。。我相当肯定应该有更好的方法来做到这一点

这是我的代码(这些不是记录的实际列名):

所以我的问题是:

如何在不使用groupby的情况下以相对高效的方式合并pandas中的行

我的理解是,不鼓励在修改任务中使用iterrow对象

或者,我只是在破坏熊猫的预期用途,真的应该把它作为文本文件进行这种修改吗?我假设将行转储到列表中会更慢,并且我需要使用numpy数组


我仍在与大熊猫结识,因此非常感谢您的帮助

我想对我的问题的简短回答是,是的,我在屠杀熊猫。我本以为列表实现会很慢,但我想与在内存中不断地洗牌相比,它最终会非常快。通过老派的读行和解析,能够在约30秒内执行操作。我会留下这个帖子,以防有人想回答如何在熊猫身上实现这一点。
sorted_dup_indices = dup_indices.sort_values(ascending = False)

for i in sorted_dup_indices:
    row_up = data.iloc[i-1]
    row_cur = data.iloc[i]
    
    # need to get weighted average price
    row_up["A"] = row_up["A"]*row_up["B"]
    row_cur["A"] = row_cur["A"]*row_cur["B"]
    row_up["B"] += row_cur["B"]
    row_up["A"] += row_cur["A"]
    row_up["A"] = row_up["A"]/row_up["B"]
    row_up["C"] += row_cur["C"]
    row_up["D"] += row_cur["D"]
    row_up["E"] += row_cur["E"]
    row_up["F"] += row_cur["F"]
    
    data.iloc[i-1] = row_up
data.drop(data.index[dup_indices], inplace = True)