Pandas按组分组并转换为JSON列表

23

我有一个如下的pandas数据框:

idx, f1, f2, f3
1,   a,  a,  b
2,   b,  a,  c
3,   a,  b,  c
.
.
.
87   e,  e,  e

我需要根据 idx 列将其他列转换为字典列表,最终结果应为:

idx, features
1 ,  [{f1:a, f2:a, f3:b}, {f1:b, f2:a, f3:c}, {f1:a, f2:b, f3:c}]
.
.
.
87,  [{f1: e, f2:e, f3:e}]

在pandas中是否可以使用groupby实现类似这样的操作?


1
你有复现这个问题的代码吗? - Chiel
1个回答

26
你可以使用 groupby 按照索引进行分组,然后使用applyto_json将数据转化为JSON格式:
print df
    f1 f2 f3
idx         
1    a  a  b
1    b  a  c
1    a  b  c
87   e  e  e

print df.groupby(level=0).apply(lambda x: x.to_json(orient='records'))

1     [{"f1":"a","f2":"a","f3":"b"},{"f1":"b","f2":"...
87                       [{"f1":"e","f2":"e","f3":"e"}]
dtype: object

或者如果列 idx 不是 index

print df
   idx f1 f2 f3
0    1  a  a  b
1    1  b  a  c
2    1  a  b  c
3   87  e  e  e

print df.groupby('idx').apply(lambda x: x.to_json(orient='records'))
idx
1     [{"idx":1,"f1":"a","f2":"a","f3":"b"},{"idx":1...
87              [{"idx":87,"f1":"e","f2":"e","f3":"e"}]
dtype: object

它是如何工作的?如果有帮助,请不要忘记接受解决方案。谢谢。 - jezrael
7
to_json函数创建了一个字符串列。如果您想获得实际的字典列表而无需重新解析json,可以使用df.groupby('idx').apply(lambda g: g.to_dict(orient='records'))语句,然后在结果上调用.tolist()获取字典列表的列表或者调用.to_dict()获取一个字典,其键为idx,对应值为[{f1: ..., f2: ..., f3: ...}] - patricksurry
我该如何为这个 JSON 提供我预先决定的模式?如果我只想要 JSON 中的 4 列中的其中 2 列,并以某些不同的格式呈现,该怎么办? - j '
@j' - 如果我理解正确,需要自定义函数 :( - jezrael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接