2016-12-13 63 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,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