gpt4 book ai didi

python - 使用groupby将 Pandas 数据框转换为Python中的嵌套字典

转载 作者:行者123 更新时间:2023-12-04 03:26:11 37 4
gpt4 key购买 nike

我在 Python 中有以下数据框:

my_df = pd.DataFrame([["123456", "a", "80", False, "beta", None, None], ["123456", "b", "80", False, "beta", None, None],["7891011", "a", "80", False, "beta", None, None], ["7891011", "b", "80", False, "beta", None, None]], columns = ["device", "variable", "size", "manual", "method","nrow", "ncol"])

>>> my_df.head()
device variable size manual method nrow ncol
0 123456 a 80 False beta None None
1 123456 b 80 False beta None None
2 7891011 a 80 False beta None None
3 7891011 b 80 False beta None None

我想把它转换成下面的嵌套字典结构:

{
'123456':
{
'a': {
'size': 80,
'manual': False,
'method': 'beta',
'nrow': None,
'ncol': None
},
'b': {
'size': 80,
'manual': False,
'method': 'beta',
'nrow': None,
'ncol': None
}
},
'7891011':
{
'a': {
'size': 80,
'manual': False,
'method': 'beta',
'nrow': None,
'ncol': None
},
'b': {
'size': 80,
'manual': False,
'method': 'beta',
'nrow': None,
'ncol': None
}
}
}

我可以轻松地遍历变量并使用 pandas 进行一些过滤,但这似乎不是很有效。有没有办法使用 df.groupby() 来做到这一点?

也许:

my_df.groupby(["device", "variable"]).apply(list).to_dict()

但这会弄乱键名。

最佳答案

首先按device分组(级别1)并保留除device之外的所有列然后将variable设置为索引(级别2)最后转换dict 的所有列(级别 3)。最后,将整个数据框转换为字典。

import json

d = df.groupby("device")[["variable", "size", "manual", "method", "nrow", "ncol"]] \
.apply(lambda x: x.set_index("variable").to_dict(orient="index")) \
.to_dict()
print(json.dumps(d, indent=4, sort_keys=True))

{
"123456": {
"a": {
"manual": false,
"method": "beta",
"ncol": null,
"nrow": null,
"size": "80"
},
"b": {
"manual": false,
"method": "beta",
"ncol": null,
"nrow": null,
"size": "80"
}
},
"7891011": {
"a": {
"manual": false,
"method": "beta",
"ncol": null,
"nrow": null,
"size": "80"
},
"b": {
"manual": false,
"method": "beta",
"ncol": null,
"nrow": null,
"size": "80"
}
}
}

关于python - 使用groupby将 Pandas 数据框转换为Python中的嵌套字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67572720/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com