【发布时间】:2017-02-28 19:38:44
【问题描述】:
这是我经过预处理后收到的数据框df:
name type range time number
0 XXXX 11111 1-120 [1-120, 261.05] [1-120, 23229]
1 XXXX 11111 121-240 [121-240, 277.79] [121-240, 6382]
2 XXXX 11111 241-360 [241-360, 269.64] [241-360, 2769]
3 XXXX 11111 361-480 [361-480, 279.09] [361-480, 1331]
我想把它转换成下面的json字符串:
[{"name":"XXXX","type":11111,"time":[["1-120",261.05],["121-240",277.79],["241-360",269.64],["361-480",279.09]],"number":[["1-120",23229],["121-240",6382],["241-360",2769],["361-480",1331]]
如果我这样做,我会收到错误ValueError: No axis named "type" for object type <class 'pandas.core.frame.DataFrame'>:
jsonresult = df.groupby('name','type')['time','number'].agg(lambda x : x.tolist()).reset_index().to_json(orient='records')
jsonresult
只有当我使用 df.groupby('name') 或 df.groupby('type') 时它才有效。
【问题讨论】:
-
添加
[]-df.groupby(['name','type'])怎么样? -
也可以用
agg代替apply -
@jezrael:至于
[],我收到一个错误:ValueError: Function does not reduce。至于apply,我明白了:AttributeError: 'DataFrame' object has no attribute 'tolist' -
@jezrael:如果它可能有用,我创建了列
time和number,如下所示:df.time = list(map(list, zip(df.range, df.time)))。