首页 > 解决方案 > 堆叠大型多索引 df 然后转换为 dict 的更快替代方案

问题描述

我有一些多索引的中大型数据框(例如,请参见下面的示例代码),我想将它们转换为字典。我目前的方法相当简单,只需要多个stack()then to_dict()。然而,这在小型数据帧上工作得很好,随着索引级别的增加和数据帧变得更大,这种方法变得慢得多。有谁知道更快的方法来做到这一点?

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

感谢您的任何建议。

标签: pythonpandasdataframedictionary

解决方案


推荐阅读