【发布时间】:2018-02-22 15:05:43
【问题描述】:
有没有一种有效的方法来创建分层 JSON(n 级深),其中父值是键而不是变量标签?即:
{"2017-12-31":
{"Junior":
{"Electronics":
{"A":
{"sales": 0.440755
}
},
{"B":
{"sales": -3.230951
}
}
}, ...etc...
}, ...etc...
}, ...etc...
1.我的测试数据框:
colIndex=pd.MultiIndex.from_product([['New York','Paris'],
['Electronics','Household'],
['A','B','C'],
['Junior','Senior']],
names=['City','Department','Team','Job Role'])
rowIndex=pd.date_range('25-12-2017',periods=12,freq='D')
df1=pd.DataFrame(np.random.randn(12, 24), index=rowIndex, columns=colIndex)
df1.index.name='Date'
df2=df1.resample('M').sum()
df3=df2.stack(level=0).groupby('Date').sum()
2。我正在进行的转换,因为它似乎是构建 JSON 的最合乎逻辑的结构:
df4=df3.stack(level=[0,1,2]).reset_index() \
.set_index(['Date','Job Role','Department','Team']) \
.sort_index()
3.到目前为止我的尝试
我遇到了这个very helpful SO question,它使用以下代码解决了一级嵌套问题:
j =(df.groupby(['ID','Location','Country','Latitude','Longitude'],as_index=False) \
.apply(lambda x: x[['timestamp','tide']].to_dict('r'))\
.reset_index()\
.rename(columns={0:'Tide-Data'})\
.to_json(orient='records'))
...但我找不到让嵌套.groupby()s 工作的方法:
j=(df.groupby('date', as_index=True).apply(
lambda x: x.groupby('Job Role', as_index=True).apply(
lambda x: x.groupby('Department', as_index=True).apply(
lambda x: x.groupby('Team', as_index=True).to_dict()))) \
.reset_index().rename(columns={0:'sales'}).to_json(orient='records'))
【问题讨论】:
-
您能否以文本/CSV 格式发布示例数据集,以便我们复制和粘贴?
-
@MaxU - 我已经用我的输入虚拟 DataFrame 更新了问题的开头 - 谢谢!
标签: python json pandas dataframe