[英]Dataframe to JSON for grouped data in 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仍然是键,而变量是值。
这是一个简单的解决方案:
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
s将被括在单引号中。 因此,在通过此命令运行dt_to_json(df)
的输出之后:
str(dt_to_json(df)).replace("'", "\"")
您将获得有效的JSON。 我和你试过这个DataFrame
粘贴输出这里检查的结果,它的工作。
使用诸如to_json()的内置函数可能会有更优雅的解决方案,但我对pandas
不太熟悉。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.