我有一个pandas数据框:
df = pd.DataFrame({
"Column1": ['A', 'A', 'B', 'B', 'C', 'C', 'C'],
"Column2": ['x1', 'x2', 'z1', 'z2', 'm1', 'm2', 'm3'],
"Column3": ['y1', 'y2', 'd1', 'd2', 'n1', 'n2', 'n3']
})
如何按第一列分组以获得以下输出
Column1 | new_column
------- | --------|--------
A | [{"Column2": "x1", "Column3": "y1"}, {"Column2": "x2","Column3": "y2"}]
B | [{"Column2": "z1", "Column3": "d1"}, {"Column2": "z2","Column3": "d2"}]
C | [{"Column2": "m1", "Column3": "n1"}, {"Column2": "m2","Column3":
"m2"},{"Column2": "m3", "Column3": "n3"}]
我需要这样做才能与Column1加入另一个数据帧。
谢谢
答案 0 :(得分:1)
您可以使用以下代码:
df_out = df.groupby('Column1')\
.apply(lambda x: x.drop('Column1',axis=1).to_dict(orient='record'))\
.reset_index(name='new_column')
输出:
Column1 new_column
0 A [{'Column3': 'y1', 'Column2': 'x1'}, {'Column3...
1 B [{'Column3': 'd1', 'Column2': 'z1'}, {'Column3...
2 C [{'Column3': 'n1', 'Column2': 'm1'}, {'Column3...
使用to_dict显示完整数据框
df_out.to_dict()
输出:
'A': [{'Column2': 'x1', 'Column3': 'y1'}, {'Column2': 'x2', 'Column3': 'y2'}],
'B': [{'Column2': 'z1', 'Column3': 'd1'}, {'Column2': 'z2', 'Column3': 'd2'}],
'C': [{'Column2': 'm1', 'Column3': 'n1'},
{'Column2': 'm2', 'Column3': 'n2'},
{'Column2': 'm3', 'Column3': 'n3'}]}