gpt4 book ai didi

python - 一系列的集合操作

转载 作者:太空宇宙 更新时间:2023-11-03 19:04:36 24 4
gpt4 key购买 nike

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

我相信 apply() 是这里缺失的部分,但我的用法一定不正确,因为我收到了错误。 pandas 手册并未真正涵盖在 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 与 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

尝试 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() 步骤来创建完整的矩阵。

最佳答案

既然你问的是集合运算,为什么不使用 set对象:

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

并应用设置交集:

sharedvector = evector.apply(lambda x: x & e2)

如果您的数据有 NaN,您可以包装每个 set 调用来测试它是否是 float :

evector = df.yes.str.split(' ').apply(lambda x: x
if isinstance(x, float)
else set(x))
e2 = set(attendframe[attendframe.event==686467261]]['yes'])
sharedvector = evector.apply(lambda x: x if isinstance(x, float) else x & e2)

关于python - 一系列的集合操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15067370/

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