我的DF是:
df = pd.DataFrame({'city': ['POA', 'POA', 'SAN'], 'info' : [10,12,5]}, index = [4314902, 4314902, 4300803])
df.index.rename('ID_city', inplace=True)
output:
city info
ID_city
4314902 POA 10
4314902 POA 12
4300803 SAN 5
我需要另存为按索引定向的json。仅当每个索引都是唯一的时,以下命令才有效。
df.to_json('df.json', orient='index')
是否可以保存此DataFrame,并在他找到重复索引时创建一个数组? 我的愿望输出:
{ 4314902 : [ {'city': 'POA', 'info': 10} , {'city': 'POA', 'info': 11} ]
,4300803 : {'city': 'SAN', 'info': 5} }
答案 0 :(得分:1)
我不知道内置的Pandas功能,该功能可以处理json orient ='index'导出中的重复索引。
您当然可以手动构建它。将列合并为一个包含字典的列:
cols_as_dict = df.apply(dict, axis=1)
ID_city
4314902 {'city': 'POA', 'info': 10}
4314902 {'city': 'POA', 'info': 12}
4300803 {'city': 'SAN', 'info': 5}
将行放入列表中,并按索引分组:
combined = cols_as_dict.groupby(cols_as_dict.index).apply(list)
ID_city
4300803 [{'city': 'SAN', 'info': 5}]
4314902 [{'city': 'POA', 'info': 10}, {'city': 'POA', ...
然后编写json:
combined.to_json()
'{"4300803":[{"city":"SAN","info":5}],"4314902":[{"city":"POA","info":10},{"city":"POA","info":12}]}'
即使每个索引只有一个条目,它也会创建一个列表。与混合数据类型(元素列表或单个元素)相比,这实际上应该使处理更加容易。
如果您设置为混合类型(字典或多个字典列表),请执行combined.to_dict()
,将具有单个元素的列表更改回其第一个元素,然后转储json。