【问题标题】:How can I efficiently disaggregate data in a Dataframe (given a set of weights, mapping, etc.)?如何有效地分解 Dataframe 中的数据(给定一组权重、映射等)?
【发布时间】:2012-08-26 18:20:22
【问题描述】:

我有一个数据框,它保存特定聚合级别的数据 - 我们称之为区域。

我还有一个解释这些区域是如何形成的字典。像这样的:

map = {'Alabama': 'region_1', 'Arizona': 'region_1', 'Arkansas': 'region_2' ... }

以及其区域内每个状态的一组权重,以序列形式存储:

Alabama    .25
Arizona    .75
Arkansas   .33
....

是否有一种有效的方法可以应用此分解图来获取州级别的新数据框?

聚合很容易:

df_regional = df_states.groupby(map).sum()

但是我怎样才能进行分解呢?

【问题讨论】:

    标签: pandas


    【解决方案1】:

    假设两个数据帧,df_statesdf_regional,具有以下内容 结构:

    In [36]: df_states
    Out[36]: 
              Weight    Region
    Alabama     0.25  region_1
    Arizona     0.75  region_1
    Arkansas    0.33  region_2
    
    In [37]: df_regional
    Out[37]: 
              Value
    region_1    100
    region_2     80
    

    pandas.merge 是否以看起来有用的方式排列数据?

    In [39]: df = pandas.merge(df_states, df_regional, left_on='Region', right_index=True)
    
    In [40]: df
    Out[40]: 
              Weight    Region  Value
    Alabama     0.25  region_1    100
    Arizona     0.75  region_1    100
    Arkansas    0.33  region_2     80
    
    In [41]: df.Weight * df.Value
    Out[41]: 
    Alabama     25.0
    Arizona     75.0
    Arkansas    26.4
    

    【讨论】:

      【解决方案2】:
      In [238]: map = {'Alabama': 'region_1', 'Arizona': 'region_1', 'Arkansas': 'region_2'}
      
      In [239]: weigths = pandas.Series([.25, .75, .33], index=['Alabama', 'Arizona', 'Arkansas'])
      
      In [240]: df_states = pandas.DataFrame({'map': pandas.Series(map), 'weigths': weigths})
      
      In [241]: df_states
      Out[241]:
                     map  weigths
      Alabama   region_1     0.25
      Arizona   region_1     0.75
      Arkansas  region_2     0.33
      
      In [242]: df_regional = df_states.groupby('map').sum()
      
      In [243]: df_regional
      Out[243]:
                weigths
      map
      region_1     1.00
      region_2     0.33
      

      【讨论】:

        猜你喜欢
        • 2021-03-31
        • 2014-08-14
        • 1970-01-01
        • 1970-01-01
        • 2013-12-26
        • 1970-01-01
        • 2022-06-30
        • 2019-02-08
        • 1970-01-01
        相关资源
        最近更新 更多