2017-11-09 1 views
2

저는 도시 이름이 키로 된 사전을 가지고 있으며 각 도시에 해당하는 날짜 목록이 있습니다. 예 :List to Pandas DataFrame의 값으로 사전 변환

{ 
'A':['2017-01-02','2017-01-03'], 
'B':['2017-02-02','2017-02-03','2017-02-04','2017-02-05'], 
'C':['2016-02-02'] 
} 

그리고 이것을 2 열로 다음 데이터 프레임으로 변환하고 싶습니다.

City_Name Date 
A   2017-01-02 
A   2017-01-03 
B   2017-02-02 
B   2017-02-03 
B   2017-02-04 
B   2017-02-05 
C   2016-02-02 
+0

답을 지금 확인하십시오, 그 일을 할 것입니다 –

답변

3

또는 우리가

pd.Series(d).apply(pd.Series).melt().dropna() 
Out[142]: 
    variable  value 
0   0 2017-01-02 
1   0 2017-02-02 
2   0 2016-02-02 
3   1 2017-01-03 
4   1 2017-02-03 
7   2 2017-02-04 
10   3 2017-02-05 
PIR

에서 영감을 melt

pd.DataFrame(dict([ (k,pd.Series(v)) for k,v in d.items() ])).melt().dropna() 
Out[51]: 
    variable  value 
0  A 2017-01-02 
1  A 2017-01-03 
4  B 2017-02-02 
5  B 2017-02-03 
6  B 2017-02-04 
7  B 2017-02-05 
8  C 2016-02-02 

하는 방식의 사용 수

+0

https://stackoverflow.com/a/47204339/2901002를 확인하십시오 : ( – jezrael

+0

@jezrael 그들은 동일합니까? – Wen

+0

다음과 같이 보입니다. ( – jezrael

1

당신은 사용할 수 있습니다 DataFrame.from_dict (목록이 같은 아이폰에 모두있는 경우에만) PD 등

수입 팬더 PD로

수입 팬더

d = { 
'A':['2017-01-02','2017-01-03'], 
'B':['2017-02-02','2017-02-03','2017-02-04','2017-02-05'], 
'C':['2016-02-02'] 
} 

df = pd.DataFrame.from_dict(d, orient='index').stack().reset_index() 

df.columns = ["City_Name", "A", "Date"] 

del df["A"] 

print(df) 

고해상도 :

City_Name  Date 
0   B 2017-02-02 
1   B 2017-02-03 
2   B 2017-02-04 
3   B 2017-02-05 
4   A 2017-01-02 
5   A 2017-01-03 
6   C 2016-02-02 
+0

@jezrael 죄송합니다 그 세부 사항을 잊지 : ( –

+0

아니예요 https://snag.gy/LZvxSd.jpg – jezrael

+0

@ jezrael 내가 원하는 대답을 편집했습니다 :) –

2

반복 keys에 대한 numpy.repeat를 사용

#get lens of lists 
a = [len(x) for x in d.values()] 
#flattening values 
b = [i for s in d.values() for i in s] 
df = pd.DataFrame({'City_Name':np.repeat(list(d.keys()), a), 'Date':b}) 
print (df) 

    City_Name  Date 
0   C 2016-02-02 
1   B 2017-02-02 
2   B 2017-02-03 
3   B 2017-02-04 
4   B 2017-02-05 
5   A 2017-01-02 
6   A 2017-01-03 

또 다른 유사한 같은 Danh Pham' solution, 신용을 그에게 :

df = pd.DataFrame([(i, day) for i,j in d.items() for day in j], 
        columns=['City_Name','Date']) 
print(df) 

    City_Name  Date 
0   C 2016-02-02 
1   B 2017-02-02 
2   B 2017-02-03 
3   B 2017-02-04 
4   B 2017-02-05 
5   A 2017-01-02 
6   A 2017-01-03 
+0

나는 그것을 좋아한다! 더하기 하나예요 :) –

1

당신은 이름과 날짜, 전직의 튜플의리스트에 데이터를 다시 처리 할 수 ​​있습니다 ('A', '2017-01-01') 전에 DataFrame을 .

이 시도 :

import pandas as pd 

data = { 
'A':['2017-01-02','2017-01-03'], 
'B':['2017-02-02','2017-02-03','2017-02-04','2017-02-05'], 
'C':['2016-02-02'] 
} 

pd.DataFrame([(i[0], day) for i in data.items() for day in i[1]]) 

출력 :

0   1 
0 A 2017-01-02 
1 A 2017-01-03 
2 C 2016-02-02 
3 B 2017-02-02 
4 B 2017-02-03 
5 B 2017-02-04 
6 B 2017-02-05 
관련 문제