首页 > 解决方案 > 分组熊猫数据框中的嵌套字典

问题描述

我有一个像这样的熊猫数据框:

    Tail Number | flight route | digit
    _______________
    001C     | (VB, MI)   | 1
             | (CC, SK)   | 2
             | (KF, KC)   | 1
    004N     | (AZ, AL)   | 2
             | (AU, NY)   | 3
    005F     | (ALB, TPA) | 5
             | (ORD, JAC) | 2

我感兴趣的变量是尾号、飞行路线(一个元组)和数字(这是一个整数值列)。

我想用它制作一个嵌套字典,将尾号作为键,另一个内部字典的键是航线,值是数字。理想情况下,嵌套字典应如下所示:

d = {001C :{  {(VB, MI): 1}, {(CC, SK): 2},  {(KF, KC):1} },
    004N :{    {(AZ, AL): 2}, {(AU, NY):3},
    005F :{  {(ALB, TPA):5},  {(ORD, JAC):2},  ... }

你可以帮帮我吗?

标签: pythonpandaspandas-groupby

解决方案


您可以使用这样的 dict 理解:

d = {i: {j:df.loc[(df['Tail Number']==i)&           
                  (df['flight route']==j),'digit'].iloc[0] #take every digit
           for j in df.loc[df['Tail Number']==i,'flight route']} #for every flight route
           for i in df['Tail Number']} #in each Tail Number

两个dict理解,像for循环一样,迭代1)尾号和2)飞行路线(在每个尾号内)。

Out[8]: 
{'001C': {('VB', 'MI'): 1, ('CC', 'SK'): 2, ('KF', 'CC'): 1},
 '004N': {('AZ', 'AL'): 2, ('AU', 'NY'): 3},
 '005F': {('ALB', 'TPA'): 5, ('ORD', 'JAC'): 2}}

如果你有一个多索引,你可能需要先做

df = df.reset_index()

推荐阅读