- Use
json_normalize
处理一个list
字典并在设置公共路径后将各个字典分成单独的系列,即info这里。然后,unstack
+ 应用系列,该系列将向下附加到该级别。
from pandas.io.json import json_normalize
df_info = json_normalize(df.to_dict('list'), ['info']).unstack().apply(pd.Series)
df_info
- 旋转
DF
带有可选的aggfunc
处理重复的索引轴:
DF = df_info.pivot_table(index=df_info.index.get_level_values(1), columns=['b'],
values=['a'], aggfunc=' '.join)
DF
- 最后横向连接:
pd.concat([df[['ID']], DF.xs('a', axis=1).rename_axis(None, 1)], axis=1)
开始DF
used:
df = pd.DataFrame(dict(ID=[0,1,2], info=[[{u'a': u'good', u'b': u'type1'}, {u'a': u'bad', u'b': u'type2'}],
[{u'a': u'bad', u'b': u'type1'}, {u'a': u'bad', u'b': u'type2'}],
[{u'a': u'good', u'b': u'type1'}, {u'a': u'good', u'b': u'type2'}]]))