pandas dataframe转换对象数组中的值

时间:2016-12-02 07:15:18

标签: python pandas

我想转换下面的pandas数据框

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 个答案:

答案 0 :(得分: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}
]