我正在尝试将数据框转换为嵌套字典,但到目前为止没有成功。 我的数据框看起来像:
_id date predicted_date code type predicted_value
5d223332216e3b4d587204db 2010-12-31 2011-12-31 70 delta 140
5d223332216e3b4d587204db 2016-12-31 2017-12-31 70 delta 360
5d223506216e3b4d587204dc 2008-12-31 2009-12-31 70 delta 40
5d223506216e3b4d587204dc 2009-12-31 2010-12-31 70 delta 55
5d223506216e3b4d587204dc 2010-12-31 2011-12-31 70 delta 70
我想要这样的字典:
{
"_id":"5d223332216e3b4d587204db",
"delta":[
{
"date":2010-12-31,
"data":{
"70":140
}
},
{
"date":2016-12-31,
"data":{
"70":360
}
}
]
},
{
"_id":"5d223506216e3b4d587204dc",
"delta":[
{
"date":2008-12-31,
"data":{
"70":40
}
},
{
"date":2009-12-31,
"data":{
"70":55
}
},
{
"date":2010-12-31,
"data":{
"70":70
}
}
]
}
我尝试使用groupby(),apply(),lambda函数,to_dict()...我没有得到预期的结果。
有需要帮助吗?
非常感谢
西蒙(Simon)
答案 0 :(得分:0)
您可以混合使用groupby
和列表理解。您还可以将解析分解为较小的函数,然后将其放入类中。
class Converter:
""" convert a DataFrame to nested dict structure"""
@staticmethod
def _row_to_dict(row):
return {
"date": row.date,
"data": {
str(row.code): row.predicted_value
}
}
@staticmethod
def _group_to_dict(_id, group):
return {
"_id": _id,
"delta": [Converter._row_to_dict(row) for _, row in group.iterrows()]
}
@staticmethod
def to_dict(df):
return [
Converter._group_to_dict(_id, group)
for _id, group in df.groupby('_id')
]
Converter.to_dict(df)
输出:
[{'_id': '5d223332216e3b4d587204db',
'delta': [{'data': {'70': 140}, 'date': '2010-12-31'},
{'data': {'70': 360}, 'date': '2016-12-31'}]},
{'_id': '5d223506216e3b4d587204dc',
'delta': [{'data': {'70': 40}, 'date': '2008-12-31'},
{'data': {'70': 55}, 'date': '2009-12-31'},
{'data': {'70': 70}, 'date': '2010-12-31'}]}]