虽然panda的groupby
能够使用sum
和mean
等函数聚合数据,但有没有办法聚合到对象列表中,这些对象的键对应于这些值的列名是从?
问题:
如果数据看起来像这样
A B C
1 10 22
1 12 20
1 11 8
1 10 10
2 11 13
2 12 10
3 14 0
我们怎样才能让熊猫将其转化为这个假设的输出:
A D
1 [{'B':10, 'C':22}, {'B':12, 'C':20}, {'B':11, 'C':8}, {'B':10, 'C':10}]
2 [{'B':11, 'C':13}, {'B':12, 'C':10}]
3 [{'B':14, 'C':0}]
答案 0 :(得分:1)
我实际上并不确定这会起作用,但似乎也是如此。
In [35]: df.groupby('A').apply(lambda x: x.to_dict(orient='records'))
Out[35]:
A
1 [{u'A': 1, u'C': 22, u'B': 10}, {u'A': 1, u'C'...
2 [{u'A': 2, u'C': 13, u'B': 11}, {u'A': 2, u'C'...
3 [{u'A': 3, u'C': 0, u'B': 14}]
dtype: object
根据您尝试完成的内容,可能更自然地迭代groupby对象并进行转换,如下所示:
In [36]: for a, df_gb in df.groupby('A'):
...: d = df_gb.to_dict(orient='records')
...:
答案 1 :(得分:0)
直接使用群组。这是一个类似于你想要的字典。
g = df.groupby("A")
{a:list(s.drop("A", axis=1).T.to_dict().values()) for a,s in g}
{'1': [{'B': '10', 'C': '22'},
{'B': '12', 'C': '20'},
{'B': '11', 'C': '8'},
{'B': '10', 'C': '10'}],
'2': [{'B': '11', 'C': '13'}, {'B': '12', 'C': '10'}],
'3': [{'B': '14', 'C': '0'}]}