2016-12-02 182 views
0

的陣列我想下面的熊貓數據幀轉換大熊貓據幀轉換值對象

data = pd.DataFrame([[1,2], [5,6]], columns=['10+', '20+'], index=['A', 'B']) 
data.index.name = 'City' 
data.columns.name= 'Age Group' 
print data 

Age Group 10+ 20+ 
City    
A   1 2 
B   5 6 

到字典的數組,像

[ 
{'Age Group': '10+', 'City': 'A', 'count': 1}, 
{'Age Group': '20+', 'City': 'A', 'count': 2}, 
{'Age Group': '10+', 'City': 'B', 'count': 5}, 
{'Age Group': '20+', 'City': 'B', 'count': 6} 
] 

我能夠得到上述預期結果使用以下回路

result = [] 
cols_name = data.columns.name 
index_names = data.index.name 
for index in data.index: 
    for col in data.columns: 
     result.append({cols_name: col, index_names: index, 'count': data.loc[index, col]}) 

有沒有更好的方法來做到這一點?由於我的原始數據會有大量記錄,因此使用for循環需要更多時間。

回答

1

我認爲你可以使用stackreset_index的重塑和最後to_dict

print (data.stack().reset_index(name='count')) 
    City Age Group count 
0 A  10+  1 
1 A  20+  2 
2 B  10+  5 
3 B  20+  6 

print (data.stack().reset_index(name='count').to_dict(orient='records')) 
[ 
    {'Age Group': '10+', 'City': 'A', 'count': 1}, 
    {'Age Group': '20+', 'City': 'A', 'count': 2}, 
    {'Age Group': '10+', 'City': 'B', 'count': 5}, 
    {'Age Group': '20+', 'City': 'B', 'count': 6} 
] 
+0

當然,沒問題。 – jezrael