Python中分组数据的Dataframe到JSON

2024-07-05 09:03:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,看起来有点像这样:

my_df = pd.DataFrame({'business_id':[1,1,1,2,2,2,3,3,3],
              'year':[2010,2011,2012,2010,2011,2012,2010,2011,2012],
             'number_staff':[3,4,5,4,3,5,6,5,8],
             'ave_turnover_in_k':[10,12,13,13,10,17,16,15,17]})

我希望它看起来像这样:

{  
   "1":{  
      "number_staff":{  
         "2010":3,
         "2011":4,
         "2012":5
      },
      "ave_turnover_in_k":{  
         "2010":10,
         "2011":12,
         "2012":13
      }
   },
   "2":{  
      "number_staff":{  
         "2010":4,
         "2011":3,
         "2012":5
      },
      "ave_turnover_in_k":{  
         "2010":13,
         "2011":10,
         "2012":17
      }
   },
   "3":{  
      "number_staff":{  
         "2010":6,
         "2011":5,
         "2012":8
      },
      "ave_turnover_in_k":{  
         "2010":16,
         "2011":15,
         "2012":17
      }
   }
}

我有我的生意清单:

business = list(set(list(my_df.iloc[:,1])))
business

我以一家企业的员工人数为例,为一家企业创建一本词典:

no_staff = my_df.loc[my_df['business_id'] == 1].iloc[:,[3,2]]
no_staff
no_staff_dict = {list(no_staff.columns.values)[1]:no_staff.set_index('year').T.to_dict('records')[0]}
no_staff_dict

但是我无法解决如何迭代所有业务,然后将数据添加到业务列表中,以便业务ID仍然是键,变量是值。你知道吗


Tags: 数据noinidnumberdfmy业务
1条回答
网友
1楼 · 发布于 2024-07-05 09:03:42

这是一个简单的解决方案:

def dt_to_json(df):
  d = {}
  for i,j in zip(df['business_id'], range(len(df['year']))):
    if str(i) not in d:           
        d[str(i)] = {
            "number_staff": { str(df['year'][j]): df['number_staff'][j] },
            "ave_turnover_in_k": { str(df['year'][j]): df['ave_turnover_in_k'][j] }
        }
    else:
        d[str(i)]['number_staff'][str(df['year'][j])] = df['number_staff'][j]
        d[str(i)]['ave_turnover_in_k'][str(df['year'][j])] = df['ave_turnover_in_k'][j]
  return d

如果您将DataFrame传递给此函数,您将得到JSON对象,但string将用单引号括起来。因此,在运行dt_to_json(df)的输出之后:

str(dt_to_json(df)).replace("'", "\"")

您将获得有效的JSON。我已经用你的DataFrame尝试了这个方法,并粘贴了输出here来检查结果,结果成功了。你知道吗

注意

对于内置函数,可能有更优雅的解决方案,比如to_json(),但我对pandas不太熟悉。你知道吗

相关问题 更多 >