2017-12-15 7 views
1

I가 지금

import pandas as pd 

key_dict = {"coordinates": ["AB1", "AB1", "AB1", "AB1", "AC1", "AC1", "AD1", ...], "start": [762, 23, 75, 98, 1274, 1587, 1991, ...], "end": [2481, 238, 340, 375, 1789, 1689, 2211, ...] } 

df = pd.DataFrame(key_dict) 

print(df) 
    coordinates start end 
0   AB1 762 2481 
1   AB1  23 238 
2   AB1  75 340 
3   AB1  98 375 
4   AC1 1274 1789 
5   AC1 1587 1689 
6   AD1 1991 2211 
...  ...   ... 

Python3.x

에서 다음 팬더 DataFrame, A (중첩) 사전에이를 변환하는 것은 간단하다, 예를 들어, 열을 기반으로 고유 키와 사전에 팬더 DataFrame 녹는

my_dict = df.to_dict() 
print(my_dict) 

{'coordinates': {0: 'AB1', 1: 'AB1', 2: 'AB1', 3: 'AB1', 4: 'AC1', 5: 'AC1', 6: 'AD1'}, 
    'end': {0: 2481, 1: 238, 2: 340, 3: 375, 4: 1789, 5: 1689, 6: 2211}, 
    'start': {0: 762, 1: 23, 2: 75, 3: 98, 4: 1274, 5: 1587, 6: 1991}} 

열 이름은 기본 사전의 키이고 각 색인은 하위 집합 사전의 키입니다.

coordinates의 고유 요소가 중첩 된 사전으로 선호되며 요소는 값입니다. 위의 예에서

,이 될 것이다 :

{"AB1": {"start": [762, 23, 75, 98], "end":[2481, 238, 340, 375]}, 
    "AC1":{"start": [1274, 1587], "end":[1789, 1689]}, "AD1":{"start": [1991], "end":[2211]}, ...} 

여하튼, 하나의 인덱스를 제거하고, 제 1 열을 무시할 것이다.

답변

2

다소 복잡한 방식이지만, groupby으로 재 형성되는 작은 데이터 프레임을 사용하여 수행 할 수 있습니다.

df = df.groupby('coordinates').agg(lambda x: x.values.tolist()).T 
df 

coordinates     AB1   AC1  AD1 
end   [2481, 238, 340, 375] [1789, 1689] [2211] 
start   [762, 23, 75, 98] [1274, 1587] [1991] 
df.to_dict() 

{ 
    "AC1": { 
     "start": [ 
      1274, 
      1587 
     ], 
     "end": [ 
      1789, 
      1689 
     ] 
    }, 
    "AD1": { 
     "start": [ 
      1991 
     ], 
     "end": [ 
      2211 
     ] 
    }, 
    "AB1": { 
     "start": [ 
      762, 
      23, 
      75, 
      98 
     ], 
     "end": [ 
      2481, 
      238, 
      340, 
      375 
     ] 
    } 
} 
+0

왜 복잡한? – EB2127

+0

@ EB2127 의미에서, 출력에 도달하는 더 간단한 방법이 없다는 것입니다. 문제는 데이터 재구성의 가치가 있습니까? 그렇다면 다음은 아마도 _ _ _ _ _ _ 가능한 회선 성의 답변 일 것입니다 :-) –