Python / Pandas元素明智的2系列联合包含每个元素中的集合

时间:2016-08-20 05:23:13

标签: python-3.x pandas set series set-union

我有2个pandas数据系列,我知道它们的长度相同。每个系列在每个元素中包含sets()。我想找出一种计算有效的方法来获得这两个系列集合的元素明智联合。我创建了一个简化版本的代码,带有假系列和短系列,可以在下面播放。这种实现是一种非常低效的方法。有GOT是一种更快的方法。我真正的系列要长得多,而且我必须完成这个操作数十万次。

import pandas as pd

set_series_1 = pd.Series([{1,2,3}, {'a','b'}, {2.3, 5.4}])
set_series_2 = pd.Series([{2,4,7}, {'a','f','g'}, {0.0, 15.6}])

n = set_series_1.shape[0]  
for i in range(0,n):
    set_series_1[i] = set_series_1[i].union(set_series_2[i])

print set_series_1        
>>> set_series_1
0          set([1, 2, 3, 4, 7])
1             set([a, b, g, f])
2    set([0.0, 2.3, 15.6, 5.4])
dtype: object

我尝试将系列组合到一个数据框并使用apply函数,但是我得到一个错误,说不支持将数据集作为数据框元素。

1 个答案:

答案 0 :(得分:1)

PIR4

在测试了几个选项后,我终于找到了一个好的... pir4

测试

def jed1(s1, s2):
    s = s1.copy()
    n = s1.shape[0]
    for i in range(n):
        s[i] = s2[i].union(s1[i])
    return s

def pir1(s1, s2):
    return pd.Series([item.union(s2[i]) for i, item in enumerate(s1.values)], s1.index)

def pir2(s1, s2):
    return pd.Series([item.union(s2[i]) for i, item in s1.iteritems()], s1.index)

def pir3(s1, s2):
    return s1.apply(list).add(s2.apply(list)).apply(set)

def pir4(s1, s2):
    return pd.Series([set.union(*z) for z in zip(s1, s2)])

enter image description here