gpt4 book ai didi

python - 两列的卡住集并集

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

我有一个数据集,其中包含两列带有卡住集的列。现在我想合并/合并这些卡住集。我可以使用 for 循环来完成此操作,但是我的数据集包含超过 2700 万行,因此我正在寻找一种避免 for 循环的方法。大家有什么想法吗?

数据

import pandas as pd
import numpy as np
d = {'ID1': [frozenset(['a', 'b']), frozenset(['a','c']), frozenset(['c','d'])],
'ID2': [frozenset(['c', 'g']), frozenset(['i','f']), frozenset(['t','l'])]}
df = pd.DataFrame(data=d)

带有 for 循环的代码

from functools import reduce
df['frozenset']=0
for i in range(len(df)):
df['frozenset'].iloc[i] = reduce(frozenset.union, [df['ID1'][i],df['ID2'][i]])

所需输出

    ID1      ID2     frozenset
0 (a, b) (c, g) (a, c, g, b)
1 (a, c) (f, i) (a, c, f, i)
2 (c, d) (t, l) (c, d, t, l)

最佳答案

似乎您不需要在这里使用functools.reduce。与每对 freezesets 进行直接联合就足够了。

如果您希望此类操作获得尽可能快的速度,我建议您查看列表推导式(有关详尽的讨论,请参阅 For loops with pandas - When should I care?)。

df['union'] = [x | y for x, y in zip(df['ID1'], df['ID2'])]
df

ID1 ID2 union
0 (a, b) (c, g) (c, a, b, g)
1 (c, a) (f, i) (c, a, i, f)
2 (c, d) (l, t) (c, l, d, t)

如果您希望将其推广到多个列,您可以使用 frozenset.union() 将它们全部合并。

df['union2'] = [frozenset.union(*X) for X in df[['ID1', 'ID2']].values]
df

ID1 ID2 union union2
0 (a, b) (c, g) (c, a, b, g) (c, a, b, g)
1 (c, a) (f, i) (c, a, i, f) (c, a, i, f)
2 (c, d) (l, t) (c, l, d, t) (c, l, d, t)

关于python - 两列的卡住集并集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55724265/

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