一种可能的解决方案是在apply
中为emps
DataFrame列表定义列:
d = (pd.merge(dept, emp, on = 'dep_id')
.groupby('dep_name').apply(lambda x: x[['emp_name']]
.to_dict('r'))
.reset_index(name='emps'))
print (d)
dep_name emps
0 giraffes [{'emp_name': 'gigi'}]
1 shoes [{'emp_name': 'joe'}, {'emp_name': 'bo'}]
j = d.to_json(orient='records')
print (j)
[{"dep_name":"giraffes","emps":[{"emp_name":"gigi"}]},
{"dep_name":"shoes","emps":[{"emp_name":"joe"},{"emp_name":"bo"}]}]
d = (pd.merge(dept, emp, on = 'dep_id')
.groupby('dep_name').apply(lambda x: x[['emp_name', 'dep_id']]
.to_dict('r'))
.reset_index(name='emps'))
print (d)
dep_name emps
0 giraffes [{'dep_id': 2, 'emp_name': 'gigi'}]
1 shoes [{'dep_id': 1, 'emp_name': 'joe'}, {'dep_id': ...
j = d.to_json(orient='records')
print (j)
[{"dep_name":"giraffes","emps":[{"dep_id":2,"emp_name":"gigi"}]},
{"dep_name":"shoes","emps":[{"dep_id":1,"emp_name":"joe"},{"dep_id":1,"emp_name":"bo"}]}]
编辑1:
我认为所有转换为嵌套json的列都需要:
dept = pd.DataFrame({'dep_id': [1,2], 'dep_name':['shoes', 'giraffes'], 'def_size':[4,5]})
emp = pd.DataFrame({'dep_id': [1,1,2], 'emp_name': ['joe', 'bo', 'gigi']})
df = pd.merge(dept, emp, on = 'dep_id')
d = (df.groupby(['def_size','dep_name']).apply(lambda x: x[['emp_name']]
.to_dict('r'))
.reset_index(name='emps'))
print (d)
def_size dep_name emps
0 4 shoes [{'emp_name': 'joe'}, {'emp_name': 'bo'}]
1 5 giraffes [{'emp_name': 'gigi'}]
j = d.to_json(orient='records')
print (j)
[{"def_size":4,"dep_name":"shoes","emps":[{"emp_name":"joe"},{"emp_name":"bo"}]},
{"def_size":5,"dep_name":"giraffes","emps":[{"emp_name":"gigi"}]}]
dep_size
,我是不是需要对所有部门列进行分组? - ihadannymerge
,例如pd.merge(dept, emp, on = ['dep_id', 'dep_size'])
?还是需要将x[['emp_name', 'dep_id']]
更改为x[['emp_name', 'dep_size']]
? - jezraeldep_size
被用于连接,只需要dep_id
。我希望它在 JSON 中每个部门只出现一次,而不是像你建议的那样每个员工都出现一次。 - ihadanny