Dataframe隐式地将层次结构保存到JSON

时间:2014-12-09 02:02:48

标签: python json pandas

假设我有一个类似以下的数据框:

A    B   C       D
bar  X   one     1
bar  X   two     2
foo  Z   one     1
foo  Z   two     2
foo  Z   three   3
foo  Z   four    4

我想将其转换为JSON文件:

[{'A': 'bar',
  'B': 'X'
  'C': ['one', 'two']
  'D': ['1', '2']

 {'A': 'foo',
  'B': 'Z',
  'C': ['one', 'two', 'three', 'four'}
  'D': ['1', '2', '3', '4'}
]

当然df.to_json(orient='records')没有用。有没有办法用to_json执行此操作?或者,我该怎么做?

注意:如果存在歧义,则假设很简单:对于A的每个值,只有B的一个值。这样的对对应于保存CD序列的“记录”,其中C的每个值也只有D的一个值。

1 个答案:

答案 0 :(得分:2)

你可以这样做:

df.groupby(['A', 'B'])\
  .agg(tuple)\
  .reset_index()\
  .to_json(orient='records')

这里的技巧是在聚合步骤中转换为元组而不是直接转到列表(不知何故pandas restricts this)。元组以与列表相同的方式获得json序列化。