Вы можете немного изменить форму melt
, map
для полов и to_dict, чтобы получить список словарей.
v = (df.melt(['age', 'country', 'total', 'year'])
.rename({'variable': 'sex', 'total': 'people'}, axis=1))
v['sex'] = v['sex'].map({'males':1, 'females':2})
data = v.drop('value',1).to_dict('r')
print(data)
[{'age': 96,
'country': 'United States',
'people': 95400,
'sex': 2,
'year': 2010},
{'age': 97,
'country': 'United States',
'people': 64800,
'sex': 2,
'year': 2010},
...
]
Вы можете вместо этого хотеть JSON, поэтому используйте
json_data = v.drop('value',1).to_json(orient='records')