将Pandas数据框转换为字典,同时保留重复行。

3
我有一个数据框,长这样:
kenteken status code
0      XYZ      A  123
1      XYZ      B  456
2      ABC      C  789

我想将其转换为如下的字典嵌套字典的形式:
{'XYZ':{'code':'123', 'status':'A'}, {'code':'456', 'status':'B'}, 'ABC' : {'code':'789', 'status:'C'}}

我能想到的最接近的翻译是:“我所能想到的最接近的是:”
df.groupby('kenteken')['status', 'code'].apply(lambda x: x.to_dict()).to_dict()

这将产生:
{'ABC': {'status': {2: 'C'}, 'code': {2: '789'}},'XYZ': {'status': {0: 'A', 1: 'B'}, 'code': {0: '123', 1: '456'}}}

这段话的意思是:“这个接近但还不太对。我真的不知道该怎么办了,所以感谢任何帮助!”

1
它一定要是字典吗?看一下OrderedDict。也许一个元组列表对你的需求已经足够了。 - Tom Wojcik
我不认为这会足够完成之后的步骤,但我会尝试一下。谢谢! - Brightscales
df.to_dict(orient="records")可以让你接近目标。 - lwileczek
1
字典不能有一个键映射多个值,这似乎是你想要的。然而,你可以使用一个具有几个值元组的键。那样行吗?一个例子是 {'XYZ': ({'code':'123', 'status':'A'}, {'code':'456', 'status':'B'})} - Joel
1个回答

6

这对你有用吗?

a = dict(df.set_index('kenteken').groupby(level = 0).\
    apply(lambda x : x.to_dict(orient= 'records')))

打印变量a的值

{'ABC': [{'status': 'C', 'code': 789}], 'XYZ': [{'status': 'A', 'code': 123}, {'status': 'B', 'code': 456}]}

太棒了!非常感谢 :D - Brightscales
很高兴能帮到你。顺便说一句,你也可以给答案投票 :D - user96564
我尝试过了,但是我的声望太低了,所以显然不会被显示出来(但仍然计入)。 ;) - Brightscales

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