2014-09-27 2 views
0

좌표 거리 쌍 연산을 수행 할 배열로 변환하려는 (x, y) 좌표의 DataFrame이 있습니다.팬더 - 열을 그룹화 된 배열 좌표로 변환

df = pd.DataFrame({'type':  ['a', 'a', 'a', 'b', 'b', 'c', 'c', 'c'], 
...      'x': [1, 3, 5, 1, 3, 1, 3, 5], 
...      'y': [2, 4, 6, 2, 4, 2, 4, 6]}) 

원하는 출력 - I 각 배열에 fuction를 적용 할 수 있도록하는 배열로 그룹화/집계 된 좌표의 새로운 DataFrame : I 원하는

grp =  coordinates 
    a array([[1, 2], 
       [3, 4], 
       [5, 6]]) 

    b array([[1, 2], 
       [3, 4]]) 

    c array([[1, 2], 
       [3, 4], 
       [5, 6]]) 

거리 계산을 적용 할 ...

grp['distances'] = grp.apply(lambda x: scipy.spatial.distance.pdist(x['coordinates'], 'euclidean'), axis = 1) 

이 작업을 수행하는 데 groupby 함수를 사용할 수 없습니다. 어떤 아이디어? 쌍의 X와 새 열을 만들

답변

0

, Y 목록

gb = df.groupby('type') 
df2 = gb.aggregate({'xy': lambda x: list(x)}) 

이 생산 목록에

df['xy'] = df.apply(lambda x: [x['x'], x['y']], axis=1) 

GROUPBY 및 골재 : 적용 할

df2 
    xy 
type  
a [[1, 2], [3, 4], [5, 6]] 
b [[1, 2], [3, 4]] 
c [[1, 2], [3, 4], [5, 6]] 

참고하여 거리 함수 :

from scipy.spatial import distance 
df2['distances'] = df2['xy'].apply(lambda x: distance.pdist(x, 'euclidean')) 

df2 

    xy       distances 
type   
a [[1, 2], [3, 4], [5, 6]] [2.82842712475, 5.65685424949, 2.82842712475] 
b [[1, 2], [3, 4]]   [2.82842712475] 
c [[1, 2], [3, 4], [5, 6]] [2.82842712475, 5.65685424949, 2.82842712475]