n维表查找:数组,数据框还是字典?

时间:2014-09-10 18:54:44

标签: python numpy pandas

我正在尝试找到进行n维表查找的最佳方法。在这个例子中,有一个数据框包含一个人的状态和年份,我想通过在表格中查找相关的税率(可能是数组,数据框或字典)。首先,考虑通过数组来实现:

nobs = 4
df = DataFrame( { 'state' : np.tile( [ 'tx', 'ny'], nobs/2 ),
                  'year'  : np.tile( [ 2008, 2008, 2009, 2009 ], nobs/4 ) } )

dct = { 'tx':0, 'ny':1 }

# rows are 2008 and 2009, columns are 'tx' and 'ny'
rate_arr = np.array( [[.05,.06],
                      [.08,.09]] )

df['rate1'] = rate_arr[ df.year-2008, df.state.map(dct) ]

  state  year  rate1
0    tx  2008   0.05
1    ny  2008   0.06
2    tx  2009   0.08
3    ny  2009   0.09

以上就是我想要的,我只想看看是否有更好的方法。比如,标记numpy数组的任何好方法?

使用数据框作为查找似乎可以让我自动转换状态和年份值,但我只能将其用于一个维度,而不是两个维度:

rate_df = DataFrame( { 2008: [ .05, .06 ],
                       2009: [ .08, .09 ] } , index=(['tx','ny']) )

# doesn't work
df['rate3'] = rate_df[ df.year, df.state ]

或者,也许是嵌套字典?同样,我可以让它在一个维度而不是两个维度中运行:

rate_dict = { 'tx': { 2008: .05, 2009: .08 },
              'ny': { 2008: .06, 2009: .09 } }

# doesn't work
df['rate2'] = df.year.map( df.state.map(rate_dict) )

1 个答案:

答案 0 :(得分:2)

您正在寻找lookup

In [21]: rate_df.lookup(df['state'], df['year'])
Out[21]: array([ 0.05,  0.06,  0.08,  0.09])

In [22]: df['rate2'] = res.lookup(df['state'], df['year'])

In [23]: df
Out[23]:
  state  year  rate1  rate2
0    tx  2008   0.05   0.05
1    ny  2008   0.06   0.06
2    tx  2009   0.08   0.08
3    ny  2009   0.09   0.09

注意:您可以指定索引列,以便从numpy数组中获取标记的DataFrame:

In [11]: rate_df = pd.DataFrame(rate_arr.T, index=['tx', 'ny'], columns=[2008, 2009])

In [12]: rate_df
Out[12]:
    2008  2009
tx  0.05  0.08
ny  0.06  0.09

更新:我需要转移numpy数组,以便rate_df正确定位。