【问题标题】:Pandas convert dataframe to dictionary with unique keys as (index,col) from the dataframePandas 将数据帧转换为具有唯一键的字典,如数据帧中的 (index,col)
【发布时间】:2021-05-13 00:03:37
【问题描述】:

我有下表

data = {'id':[1,2,3],'a':[4,5,6],'b':[7,8,9]}
df = pd.DataFrame(data)
df = df.set_index('id')

我想通过将此数据帧转换为dict 来生成输出,这样每个唯一的(index,column) 是字典中的键,其对应的单元格是值。键是由下划线“_”分隔的字符串。

这个玩具示例的输出如下

output_dict = {
    1_a:4,
    2_a:5,
    3_a:5,
    1_b:7,
    2_b:8,
    3_b:9,
}

到目前为止,我已经尝试过pd.pivot。我也尝试使用pd.MultiIndex.from_product 创建一个多索引,但我似乎无法让数据框只有一列具有正确的值。我能够创建正确的索引对,但无法获得正确的对应值。

任何帮助将不胜感激。

P.S:我正在寻找矢量化 pandas 方法。

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    stack 将数据框重塑为多索引系列,然后 to_dict 创建字典

    df.stack().to_dict()
    

    {(1, 'a'): 4, (1, 'b'): 7, (2, 'a'): 5, (2, 'b'): 8, (3, 'a'): 6, (3, 'b'): 9}
    

    扁平化多索引

    s = df.stack()
    s.index = ['{}_{}'.format(*t) for t in s.index]
    s.to_dict()
    

    {'1_a': 4, '1_b': 7, '2_a': 5, '2_b': 8, '3_a': 6, '3_b': 9}
    

    【讨论】:

    • 谢谢,只是想了解stack。它主要用于此目的还是还有其他用途?
    • @dracarys stack 的应用还有很多,但基本上它用于重塑数据框,即将一个或多个列级别堆叠成一个多级索引,创建一个多索引系列/数据框。您也可以查看this reshaping guide 了解有关堆栈的更多信息
    • 我实际上想转换为 JSON,我知道可以使用 to_json() 来完成。我试过了,它可以工作,但是有没有一种简单的方法可以将键转换为1_a,1_b,...2_a 这样的字符串而不是元组
    • 是的,我们可以展平 MultiIndex。让我编辑答案。
    • 我将编辑问题以包含该问题,对不起,我后来才意识到
    猜你喜欢
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 2018-06-20
    相关资源
    最近更新 更多