gpt4 book ai didi

python - 根据行号列表合并数据帧

转载 作者:行者123 更新时间:2023-12-01 09:12:35 27 4
gpt4 key购买 nike

我需要将大型数据帧 (> 50000) 中的每一行进行比较,从而导致超过 10 亿次比较,这在 Pandas 数据帧上计算成本太高。

因此,我将值加载到数组中并使用生成器进行比较:

start = df['StartPos'].values.tolist()
end = df['EndPos'].values.tolist()
index = df.index.values.tolist()
a = [(y-x, (i,j)) for i,x in enumerate(start) for j,y in enumerate(end) if (y-x) > 0 and (y-x) <= 2000 and i != j]
if len(a) == 0:
continue
prod_sizes, rows = zip(*a)
row1,row2 = zip(*rows)

现在,对于每个数据帧 df 我最终都会得到一个类似的列表

>>> row1
(0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 3, 4, 4, 4, 4)
>>> row2
(1, 2, 3, 4, 5, 2, 3, 5, 3, 5, 2, 5, 1, 2, 3, 5)

现在我想根据 row1row2 的值合并原始数据帧 df。输出数据框应如下所示:

0:   columns of row0 | columns of row1
1: columns of row0 | columns of row2
2: columns of row0 | columns of row3
3: columns of row0 | columns of row4
4: columns of row0 | columns of row5
5: columns of row1 | columns of row2
6: columns of row1 | columns of row3
...
15: columns of row4 | columns of row5

是否有 Pandas 方式根据行号列表执行此合并操作,或者我应该简单地使用循环并通过 .iloc 访问行并将它们附加到新的数据帧?

最佳答案

您可以为扩展网格合并分配关键帮助

例如,您有以下数据框

df1=pd.DataFrame({'A':[1,2,3]})
df2=pd.DataFrame({'A':[1,2,3]})

我们使用分配 key 进行合并

mergedf=df1.assign(key=1).reset_index().merge(df2.assign(key=1).reset_index(),on='key')
mergedf.loc[mergedf.index_y>mergedf.index_x] # filter out the row in df1 greater than row in df2

Out[497]:
index_x A_x key index_y A_y
1 0 1 1 1 2
2 0 1 1 2 3
5 1 2 1 2 3

关于python - 根据行号列表合并数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51529255/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com