【发布时间】:2017-09-25 18:23:32
【问题描述】:
我有一个 pandas 系列,其元素构成了 freezesets:
data = {0: frozenset({'apple', 'banana'}),
1: frozenset({'apple', 'orange'}),
2: frozenset({'banana'}),
3: frozenset({'kumquat', 'orange'}),
4: frozenset({'orange'}),
5: frozenset({'orange', 'pear'}),
6: frozenset({'orange', 'pear'}),
7: frozenset({'apple', 'banana', 'pear'}),
8: frozenset({'banana', 'persimmon'}),
9: frozenset({'apple'}),
10: frozenset({'banana'}),
11: frozenset({'apple'})}
tokens = pd.Series(data); tokens
0 (apple, banana)
1 (orange, apple)
2 (banana)
3 (orange, kumquat)
4 (orange)
5 (orange, pear)
6 (orange, pear)
7 (apple, banana, pear)
8 (persimmon, banana)
9 (apple)
10 (banana)
11 (apple)
Name: Tokens, dtype: object
我想成对应用一个函数。例如,tokens.diff 给了我连续行之间的差异:
0 NaN
1 (orange)
2 (banana)
3 (orange, kumquat)
4 ()
5 (pear)
6 ()
7 (apple, banana)
8 (persimmon)
9 (apple)
10 (banana)
11 (apple)
Name: Tokens, dtype: object
我想要同样的东西,但不是设置差异,我想要在连续行上设置联合。所以,我最理想的情况是:
0 NaN
1 (orange, apple, banana)
2 (banana, orange, apply)
3 (orange, kumquat, banana)
4 (orange, kumquat)
...
如何使用 Pandas 实现这一目标?我知道我可以使用zip 和列表组合来做到这一点,但希望有更好的方法。
【问题讨论】:
-
在最后一段代码中,您不是想把
tokens.diff()留在里面,对吗? -
@IanS 不,感谢收看。
-
嗯...这是受到不久前提出的一个问题的启发 :)
-
@JonClements 你明白了。我几乎解决了它,这是最后一个障碍。
-
@Zero 想到了这个......希望避免因为我需要在 groupby 操作中使用结果,所以有用的代码意味着更多的问题。您可以将其写在答案中,我会投赞成票,但除非真的没有其他办法,否则我不会接受。
标签: python pandas dataframe set frozenset