2016-12-13 4 views
1

У меня есть следующие панды серии упорядоченных координат точки:Панды агрегат упорядоченный координаты точки

>>> import pandas as pd 
>>> d=pd.Series([(1,1),(2,2),(3,4),(4,6)]) 
>>> d 
0 (1, 1) 
1 (2, 2) 
2 (3, 4) 
3 (4, 6) 
dtype: object 
>>> 

Я хочу создать серию отрезков, образованных этими точками. В этом случае будет 3 отрезка (между точками 0 и 1, 1 и 2 и 2 и 3.

Я могу создать это ниже, объединив оригинальную серию со своей «сдвинутой» версией, избавившись первого значение нуля, а затем применяя функцию двух колонок.

>>> pd.concat([d.shift(),d],1).dropna().apply(lambda x:tuple([x[0], x[1]]),1) 
1 ((1, 1), (2, 2)) 
2 ((2, 2), (3, 4)) 
3 ((3, 4), (4, 6)) 
dtype: object 
>>> 

есть ли лучший подход, чтобы сделать это?

ответ

3

Мне нравится использовать zip для этого

pd.Series(list(zip(d.values[:-1], d.values[1:]))) 

0 ((1, 1), (2, 2)) 
1 ((2, 2), (3, 4)) 
2 ((3, 4), (4, 6)) 
dtype: object 
+0

очень хорошее решение. – jezrael

+0

@jezrael tyvm :-) – piRSquared

+1

Ницца. Поскольку 'zip' отключается, когда кратчайший итерируемый исчерпан, вы можете сохранить несколько символов, сделав первую запись просто' d'. Тем не менее, это немного менее очевидно. – root

Смежные вопросы