2016-12-02 183 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