设置系列操作

问题描述 投票:1回答:1

我想知道是否有人可以帮助我提出解决问题的方法;我基本上有一个熊猫系列列表(以空格分隔),这些列表是使用熊猫对str.split(' ')系列的字符串操作创建的。我需要创建另一个列表系列,这些列表是每个列表与另一个列表的交集。

我相信apply()是这里缺少的部分,但是由于收到错误,我的用法一定不正确。熊猫手册没有真正涵盖在apply()中使用集合操作,但是我认为它应该是可行的?

[基本上,我有一组事件(evector),并且想要设置一个向量,其中事件与给定事件(e2)共享用户。到目前为止,这些是我的方法:

原始尝试:

evector = attendframe.yes.str.split(' ') #creates the series of lists

e2 = [attendframe.yes[attendframe.event==686467261]] #just for testing - returns [0
  #  1975964455 252302513 4226086795 3805886383 142...
  #Name: yes]

sharedvector = evector.apply(lambda x: [n for n in [x] if n in e2]) # the important bit

print sharedvector

错误: 数组的长度不同:1 vs 7

我将问题缩小为以下几行:evector = attendframe.yes.str.split(' ').apply(lambda x: set([x]))

然后,我又进行了几次尝试以使其正确。

尝试1

evector = attendframe.yes.str.split(' ').apply(lambda x: set([x]))
#Unhashable type "list"

尝试2

evector = attendframe.yes.str.split(' ').apply(lambda x: set(x))
#TypeError: 'float' object is not iterable

Attempt 3(归功于Andy Hayden)

evector = attendframe.yes.str.split(' ').apply(lambda x: x
                                                if isinstance(x, float)
                                                else set(x))

e2 = set([2394228942, 2686116898, 1056558062, 379294223])
sharedvector = evector.apply(lambda x: x if isinstance(x, float) else x.intersection(e2))
sharedvector.dropna())
#works, but returns empty arrays.

这是引起问题的数据本身的示例:

print attendframe.yes.str.split(' ')

0     [1975964455, 252302513, 4226086795, 3805886383...
1     [2394228942, 2686116898, 1056558062, 379294223...
2                                                   NaN
3                                                   NaN

如果它与最终解决方案有关,那么我最终想创建一个数据框,其边缘包含事件,并且其单元格包含任何两个给定事件之间共享的用户列表。生成列向量是其中的第一部分,然后我希望对函数运行类似的apply()步骤以创建完整矩阵。

python numpy pandas
1个回答
1
投票

由于询问设置操作,为什么不使用set对象:

set

并应用集合交集:

evector = attendframe.yes.str.split(' ').apply(set)
e2 = set(attendframe[attendframe.event==686467261]]['yes'])

如果您的数据具有sharedvector = evector.apply(lambda x: x & e2) ,则可以包装每个set调用以测试其是否为浮点数:

NaN
© www.soinside.com 2019 - 2024. All rights reserved.