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

标签 python pandas dataframe dictionary

我在 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/

相关文章:

python - 将项目插入列表中的列表

python - TensorFlow:损失函数模块化设计

python - 如何让 Python m2Crypto 与 virtualenv 一起工作?

python - 使用 pandas matplotlib 在 x 轴上显示文本描述而不是数字

python - 使用 pandas 执行分组聚合和排序的更好方法

r - 在R中将一列拆分为2

Python Pandas数据帧格式索引问题

python - 一系列时间码以区分每个时间码和第一个时间码

pandas - 为 pandas DataFrame 设置新索引(插值?)

r - 从数据框中拆分行名