【问题标题】:Convert dataframe to JSON with 2 level nested with groupby将数据框转换为 JSON 与 groupby 嵌套的 2 级
【发布时间】:2018-07-12 14:56:13
【问题描述】:

我有一个小要求,我需要以 JSON 格式列出给定两周内的所有客户及其金额。目前,我有一个这样的数据框 -

  FortNight       Amount      Customer     Parameter
  Apr-2FN-2018   339632.00    10992     CustomerSales
  Apr-2FN-2018   27282.00     10994     CustomerSales 
  Apr-2FN-2018   26353.00     10995     CustomerSales 
  May-1FN-2018   24797.00     11000     CustomerSales
  May-1FN-2018   21093.00     10990     CustomerSales
  May-2FN-2018   45679.0      10992     CustomerSales
  May-2FN-2018   45459.0      10995     CustomerSales
  May-2FN-2018   35885.0      10994     CustomerSales

预期的 JSON-

"CustomerSales" : [                                                                
    {"FortNight" : "Apr-2FN-2018",                                                                                      
         "Details" :[
             {"Customer":  "10992","Amount" : 339632.00},                                                                                                                                
             {"Customer":  "10994","Amount" : 27282.00},
             {"Customer":  "10995","Amount" : 26353.00}
           ]
    },
    {"FortNight" : "May-1FN-2018",                                                                                      
         "Details" :[
             {"Customer":  "11000","Amount" : 24797.00},                                                                                                                                
             {"Customer":  "10990","Amount" : 21093.00}
           ]
    },
    {"FortNight" : "May-2FN-2018",                                                                                      
         "Details" :[
             {"Customer":  "10992","Amount" : 45679.00},                                                                                                                                
             {"Customer":  "10995","Amount" : 45459.00},
             {"Customer":  "10994","Amount" : 35885.00}
           ]
    }
]

我尝试了以下逻辑 - Convert dataframe to JSON with 2 level nested array

但我仍然停留在另一个层次。

我也尝试了其他方法,但徒劳无功。欢迎任何帮助。提前谢谢!!...

【问题讨论】:

  • 哪些方法不适合您?
  • 目前我可以得到如下输出 - [{'Customersales': [{'FortNight': 'Apr-2FN-2018', 'Details': [{'Customer': '1100' , 'Amount': 198218.02}]}]}, {'Customersales': [{'FortNight': 'Apr-3FN-2018', 'Details': [{'Customer': '1100', 'Amount': 198218.02 }]}]}, {'Customersales': [{'FortNight': 'May-1FN-2018', '详情': [{'Customer': '1100', 'Amount': 198218.02}]}]}]

标签: python json list dictionary


【解决方案1】:

您可以通过使用CustomerSales 的字典来简化此操作,其中键等于FortNight 值,而不是使用“FortNight”字符串作为每个字典中的键的字典列表。鉴于指定的要求,以下应该可以工作。您可以遍历 DataFrame 并构建一个字典。然后第二组代码将该字典转换为您指定的格式。

sales = {}

for idx, row in df.iterrows():
    fn = row["FortNight"]
    fn_sales = sales.get(fn)
    if fn_sales is None:
        sales[fn] = {
                "Details": []
                }
        fn_sales = sales.get(fn)

    fn_sales["Details"].append({
            "Customer": row["Customer"],
            "Amount": row["Amount"]
            }
    )

sales_obj = {"CustomerSales": []}

for fn, details in sales.items():
    sales_obj["CustomerSales"].append({
            "FortNite": fn,
            "Details": details["Details"]
            })

【讨论】:

    猜你喜欢
    • 2019-07-08
    • 2018-12-20
    • 1970-01-01
    • 2020-06-14
    • 2017-03-21
    • 2020-12-16
    • 1970-01-01
    • 2019-11-24
    相关资源
    最近更新 更多