У меня есть серия панд, элементы которой составляют замороженные наборы:
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()
, не так ли? - person IanS   schedule 25.09.2017izip_longest
в случае значенийNaN
при смещении данных произвольной длины, но у меня была аналогичная идея - person gold_cy   schedule 25.09.2017rolling(2).apply()
, но он не принимает объекты: stackoverflow.com/questions/36723003/ Я думаю, что ваш лучший выбор - зацикливание. - person ayhan   schedule 25.09.2017