首页 > 解决方案 > 从 pandas 数据框创建的分组和缩进 json

问题描述

我目前有一个如下数据框:

   ln    7,26    7,27    7,28       name
26443       G       G       G  Product 1
27953       G       G       G  Product 2

这是来自每天生成的 csv,数字 (7,26; 7,27...) 是日期,这意味着它们每天都不同。我想创建一个如下所示的 json:

[{
    "index": 0,
    "ln": "26443",
    "availability": {
        "7,26": "G",
        "7,27": "G",
        "7,28": "G",
    },
    "name": "Product 1"
}, {
    "index": 1,
    "ln": "27953",
    "availability": {
        "7,26": "G",
        "7,27": "G",
        "7,28": "G",
    },
    "name": "Product 2"
}]

我用来创建 json 的当前代码如下所示,但它只是按原样转储它:

with open('output.json', 'w', encoding='utf-8') as file:
    df2.reset_index().to_json(file, orient='records', force_ascii=False)

有可能做到这一点吗?如果是这样,怎么做?

提前感谢您的任何建议!

标签: pythonjsonpandas

解决方案


您可以使用

In [672]: cols = ['7,26', '7,27', '7,28']

In [673]: dff = df.assign(availability=df[cols].apply(dict, 1)).reset_index()

In [674]: dff[dff.columns.difference(cols)].to_dict('r')
Out[674]:
[{'availability': {'7,26': 'G', '7,27': 'G', '7,28': 'G'},
  'index': 0,
  'ln': 26443,
  'name': 'Product 1'},
 {'availability': {'7,26': 'G', '7,27': 'G', '7,28': 'G'},
  'index': 1,
  'ln': 27953,
  'name': 'Product 2'}]

推荐阅读