【问题标题】:Nest 2 fields of a pandas dataframe with new name into json将具有新名称的熊猫数据框的 2 个字段嵌套到 json 中
【发布时间】:2021-01-09 11:19:08
【问题描述】:

我有这个数据框,我想从中构建一个嵌套了 idname 字段的 json

id  name   pk  model
1   n1    100  mod1
2   n2    101  mod1
3   n3    102  mod1
4   n4    103  mod1
5   n5    104  mod1
6   n6    105  mod1

我想要什么:

{
       "model":"mod1",
       "pk":100,
       "fields":{
          "id":"1",
          "name":"n1"
       }
    }

我在做什么:

authordf.groupby(["model", "pk"], as_index=False).to_json(orient="records")

以及我所拥有的:

{ 
   "model":"mod1",
   "pk":100,
   "id":"1",
   "name":"n1"
}

有人可以给我一个提示吗?谢谢

【问题讨论】:

    标签: json pandas nested


    【解决方案1】:

    将所有没有modelpk 的列转换为字典到fields 列:

    authordf['fields'] = authordf.drop(["model", "pk"], 1).apply(lambda x: x.to_dict(), 1)
    print (authordf)
       id name   pk model                   fields
    0   1   n1  100  mod1  {'id': 1, 'name': 'n1'}
    1   2   n2  101  mod1  {'id': 2, 'name': 'n2'}
    2   3   n3  102  mod1  {'id': 3, 'name': 'n3'}
    3   4   n4  103  mod1  {'id': 4, 'name': 'n4'}
    4   5   n5  104  mod1  {'id': 5, 'name': 'n5'}
    5   6   n6  105  mod1  {'id': 6, 'name': 'n6'}
    
    j = authordf[["model", "pk", 'fields']].to_json(orient="records")
    print (j)
    
    [{"model":"mod1","pk":100,"fields":{"id":1,"name":"n1"}},
     {"model":"mod1","pk":101,"fields":{"id":2,"name":"n2"}},
     {"model":"mod1","pk":102,"fields":{"id":3,"name":"n3"}},
     {"model":"mod1","pk":103,"fields":{"id":4,"name":"n4"}},
     {"model":"mod1","pk":104,"fields":{"id":5,"name":"n5"}},
     {"model":"mod1","pk":105,"fields":{"id":6,"name":"n6"}}]
    

    如果有多个值,请使用带有 lambda 函数的 DataFrame.groupby 并首先转换为嵌套字典:

    print (authordf)
       id name   pk model
    0   1   n1  100  mod1
    1   2   n2  100  mod1
    2   3   n3  102  mod1
    3   4   n4  102  mod1
    4   5   n5  104  mod1
    5   6   n6  105  mod1
    
    c = authordf.columns.difference(["model", "pk"])
    j = (authordf.groupby(["model", "pk"])[c].apply(lambda x: x.to_dict('records'))
                 .reset_index(name='fields')
                 .to_json(orient="records"))
    print (j)
    [{"model":"mod1","pk":100,"fields":[{"id":1,"name":"n1"},{"id":2,"name":"n2"}]},
     {"model":"mod1","pk":102,"fields":[{"id":3,"name":"n3"},{"id":4,"name":"n4"}]}
     ,{"model":"mod1","pk":104,"fields":[{"id":5,"name":"n5"}]},
     {"model":"mod1","pk":105,"fields":[{"id":6,"name":"n6"}]}]
    

    【讨论】:

      猜你喜欢
      • 2017-11-28
      • 2016-11-11
      • 2023-03-23
      • 2018-04-14
      • 2021-02-15
      • 2020-10-18
      • 1970-01-01
      • 2019-09-30
      相关资源
      最近更新 更多