首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两柱的Frozenset联合

两柱的Frozenset联合
EN

Stack Overflow用户
提问于 2019-04-17 09:27:08
回答 2查看 611关注 0票数 1

我有一个包含两列的数据集。现在我想合并/接受这些冷冻设备的结合。我可以使用for循环来完成这个任务,但是我的数据集包含超过2700万行,所以我正在寻找一种避免for循环的方法。有人有什么想法吗?

数据

代码语言:javascript
复制
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)

带循环的码

代码语言:javascript
复制
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]])

期望输出

代码语言:javascript
复制
    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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-17 09:40:08

似乎不需要在这里使用functools.reduce。与每对冷冻设备直接结合就足够了。

如果您希望这类操作尽可能快,我建议查看列表理解(详细讨论请参阅For loops with pandas - When should I care? )。

代码语言:javascript
复制
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()合并它们。

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2019-04-17 09:36:49

你可以试试:

代码语言:javascript
复制
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)
from functools import reduce
df['frozenset']=0

add = []
for i in range(len(df)):
    df['frozenset'].iloc[i] = reduce(frozenset.union, [df['ID1'][i],df['ID2'][i]])
add.append(df)
print(add)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55724265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档