我是Python的新手,我正在使用Pandas将一堆MySQL表转换为JSON。我目前的解决方案工作得很好,但(1)它不是非常pythonic,(2)我觉得必须有一些预先出炉的熊猫功能做我需要的......?对以下问题的任何指导都会有所帮助。
假设我有两个数据框authors
和一个联接表plays_authors
,表示作者与游戏的1:多关系。
print authors
> author_id dates notes
> 0 1 1700s a
> 1 2 1800s b
> 2 3 1900s c
print plays_authors
> author_id play_id
> 0 1 12
> 1 1 13
> 2 1 21
> 3 2 18
> 4 3 3
> 5 3 7
我想将plays_authors
合并到authors
,但不是每个作者有多个行(每个play_id
1个),我希望每个作者有一行,数组为{{ 1}}值,以便我可以轻松地将它们导出为json记录。
play_id
我目前的解决方案:
print authors
> author_id dates notes play_id
> 0 1 1700s a [12, 13, 21]
> 1 2 1800s b [18]
> 2 3 1900s c [3, 7]
authors.to_json(orient="records")
> '[{
> "author_id":"1",
> "dates":"1700s",
> "notes":"a",
> "play_id":["12","13","21"]
> },
> {
> "author_id":"2",
> "dates":"1800s",
> "notes":"b",
> "play_id":["18"]
> },
> {
> "author_id":"3",
> "dates":"1900s",
> "notes":"c",
> "play_id":["3","7"]
> }]'
那里有一个简单的groupby /更好的dict解决方案吗?这个解决方案目前还在我头上?
答案 0 :(得分:0)
数据:
In [131]: a
Out[131]:
author_id dates notes
0 1 1700s a
1 2 1800s b
2 3 1900s c
In [132]: pa
Out[132]:
author_id play_id
0 1 12
1 1 13
2 1 21
3 2 18
4 3 3
5 3 7
解决方案:
In [133]: a.merge(pa.groupby('author_id')['play_id'].apply(list).reset_index())
Out[133]:
author_id dates notes play_id
0 1 1700s a [12, 13, 21]
1 2 1800s b [18]
2 3 1900s c [3, 7]