首页 > 解决方案 > Pandas:从 DataFrame 中获取带有子计数的嵌套 json

问题描述

这是我的源 csv 文件

provider,calling_num,called_num,result

Telia,123,120,Answer
Telia,123,121,No Answer
Telia,123,122,Answer
Telia,456,124,Busy
Telia,456,500,Busy
Telia,456,480,Answer
Telia,456,478,No Answer
Telia,789,320,Answer
Telia,789,754,Answer
GlobalTelecom,512,245,Answer
GlobalTelecom,512,741,Answer
GlobalTelecom,512,841,No Answer
GlobalTelecom,486,952,Busy
GlobalTelecom,486,762,Busy
GlobalTelecom,700,834,Busy
GlobalTelecom,700,295,Answer
GlobalTelecom,700,423,No Answer
GlobalTelecom,700,384,Answer
TotalNetwork,840,756,Answer
TotalNetwork,840,982,Answer
TotalNetwork,840,725,Busy
TotalNetwork,920,953,No Answer
TotalNetwork,920,742,No Answer
TotalNetwork,920,1200,Answer
TotalNetwork,920,175,Busy
TotalNetwork,730,886,Busy
TotalNetwork,730,955,Answer
TotalNetwork,730,772,No Answer
TotalNetwork,730,955,No Answer
TotalNetwork,730,355,Busy

我完成了分组:

df = pd.read_csv("./calls.csv")
df1 = df.groupby(['provider']).size().fillna(0).astype('int64')
df2 = df.groupby(['provider','calling_num']).size().fillna(0).astype('int64')
df3 = df.groupby(['provider','calling_num','result']).size().fillna(0).astype('int64')

我需要得到嵌套的 json 文件:

[     
  {
    name: 'GlobalTelecom',
    children:[
        {
          name:'486',
          children:[ 
             {
               name:'Busy'
               children:[],
               value:'2'
             },
            
          ],
          value:'2'
        },        
        {       
          name:'512',
          children:[ 
             {
               name:'Answer'
               children:[],
               value:'2'
             },
             {
               name:'No Answer'
               children:[],
               value:'1'
             },                         
          ],
          value:'3'
        },        
        {       
          name:'700',
          children:[ 
             {
               name:'Answer'
               children:[],
               value:'2'
             },
             {
               name:'No Answer'
               children:[],
               value:'1'
             },
             {
               name:'Busy'
               children:[],
               value:'1'
             },                                                  
          ],
          value:'4'
        },                
    ],
    value:'9'
  },  
..... and so on for each provider
]

我读了这个很好的问题Convert Pandas Dataframe to nested JSON

但除此之外,我不仅需要获取每个“结果”(最详细)的计数,还需要获取“提供者”的总计数和“calling_num”的子计数。

标签: pythonjsonpandas

解决方案


推荐阅读