[英]How to convert pandas dataframe into nested dictionary or json?
我正在运行 Python 3.8 和 Pandas 0.19.2 并有一个 DataFrame 如下所示:
身份证号 | 姓名 | 数量 | 附加物 |
---|---|---|---|
1234 | A B C D | 100 美元 | 洗车-$30 |
1234 | A B C D | 100 美元 | 维护-$70 |
我需要一个字典/JSON,如下所示:
[
{
'id_number': 1234,
'name': 'ABCD',
'amount': '$100',
'addenda': [
{'payment_related_info': 'Car-wash-$30'},
{'payment_related_info': 'Maintenance-$70'}
]
}
]
我尝试使用 groupby 和 to_dict,但它不起作用。 有什么建议么? 预先感谢您的帮助。
只需通过在内部创建 dataframe 来应用 groupby 和聚合,如下所示:
data = {
"id_number": [1234, 1234],
"name": ["ABCD", "ABCD"],
"amount": ["$100", "$100"],
"addenda": ["Car-wash-$30", "Maintenance-$70"]
}
df = pd.DataFrame(data=data)
df.groupby(by=["id_number", "name", "amount"]) \
.agg(lambda col: pd.DataFrame(data=col) \
.rename(columns={"addenda": "payment_related_info"})) \
.reset_index() \
.to_json(orient="records")
这将返回您想要的结果!
如果我们向后工作,在使用 DataFrame 操作.to_dict()
之前,您需要 DataFrame 将附录信息放在这样的单行中:
身份证号 | 姓名 | 数量 | 附加物 |
---|---|---|---|
1234 | A B C D | 100 美元 | [{payment_related_info:洗车-$30,payment_related_info:维护-$70}] |
要到达这里,您可以对id_number, name, amount
执行groupby
,然后应用 function 将该 groupby 的行折叠到字典列表中,其中每个键是字符串'payment_related_info'
。
def collapse_row(x):
addenda_list = x["addenda"].to_list()
last_row = x.iloc[-1]
last_row["addenda"] = [{'payment_related_info':v} for v in addenda_list]
return last_row
grouped = df.groupby(["id_number","name","amount"]).apply(collapse_row).reset_index(drop=True)
grouped.to_dict(orient='records')
结果:
[
{
'id_number': 1234,
'name': 'ABCD',
'amount': '$100',
'addenda': [
{'payment_related_info': 'Car-wash-$30'},
{'payment_related_info': 'Maintenance-$70'}
]
}
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.