pandas 堆叠大型多索引df然后转换为dict的更快替代方法

kokeuurv  于 2023-03-06  发布在  其他
关注(0)|答案(1)|浏览(141)

我有一些多索引的大中型 Dataframe (见下面的示例代码),我想把它们转换成一个字典。我目前的方法相当简单,只需要多个stack(),然后to_dict()。这在小 Dataframe 上工作得很好,但是,随着索引级别的增加和 Dataframe 的变大,这种方法变得更慢。2有人知道更快的方法吗?

idx = pd.MultiIndex.from_product([['crop1', 'crop2', 'crop3','crop4', 'crop5', 'crop6','crop7', 'crop8', 'crop9','crop10'],
                                  ['crop1', 'crop2', 'crop3','crop4', 'crop5', 'crop6','crop7', 'crop8', 'crop9','crop10'],
                                  ['crop1', 'crop2', 'crop3','crop4', 'crop5', 'crop6','crop7', 'crop8', 'crop9','crop10'],
                                  ['crop1', 'crop2', 'crop3','crop4', 'crop5', 'crop6','crop7', 'crop8', 'crop9','crop10']])
cols = pd.MultiIndex.from_product([['Zara', 'LV', 'Roots'],
                                   ['p1', 'p2', 'p3','p4', 'p5', 'p6'],
                                  list(range(17))])
df = pd.DataFrame('-', idx, cols)
df = df.stack([0,1,2]).to_dict()

注意-我的最终法令应该同时具有当前索引和当前列标题作为键,即('crop1', 'crop1', 'crop1', 'crop1', 'LV', 'p1', 0):value
谢谢你的建议。

deyfvvtc

deyfvvtc1#

df.stack(level=[0,1,2]).to_dict()

输出:

{('crop1', 'crop1', 'crop1', 'crop1', 'LV', 'p1', 0): '-',
 ('crop1', 'crop1', 'crop1', 'crop1', 'LV', 'p1', 1): '-',
 ('crop1', 'crop1', 'crop1', 'crop1', 'LV', 'p1', 2): '-',
 ('crop1', 'crop1', 'crop1', 'crop1', 'LV', 'p1', 3): '-',
 ('crop1', 'crop1', 'crop1', 'crop1', 'LV', 'p1', 4): '-',
 ('crop1', 'crop1', 'crop1', 'crop1', 'LV', 'p1', 5): '-',
 ('crop1', 'crop1', 'crop1', 'crop1', 'LV', 'p1', 6): '-',
 ('crop1', 'crop1', 'crop1', 'crop1', 'LV', 'p1', 7): '-',
...

相关问题