分组字典数据框架中的嵌套字典

时间:2019-12-02 13:42:57

标签: python pandas pandas-groupby

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

<script>

    import Header from './components/layout/Header.vue'
    import Todos from './components/Todo.vue'

    export default {
      name: 'app',
      components: {
        Todos,
        Header,
      },
      data () {
        return {
          todos : []
        }
      },
      methods : {

        created () {
            fetch('https://jsonplaceholder.typicode.com/todos')
            .then( resp => resp.json())
            .then( data => {

                console.log(data);
            })
            .catch(err => err)

        }
      }
    }
</script>

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

我想用它来制作一个嵌套字典,以尾号作为键,再做一个内部词典,其中键是飞行路线,值是数字。嵌套字典理想上应如下所示:

    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

你能帮我吗?

2 个答案:

答案 0 :(得分:1)

您可以像这样使用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()

答案 1 :(得分:1)

一种方法是使用groupby和dict理解

{k: dict(zip(v['flight route'], v['digit'])) for k, v in df.groupby('Tail Number')}

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