为pandas中的数据框创建多个索引

时间:2015-01-23 15:42:27

标签: python pandas indexing

我有一个数据帧dat1:

Asset   Returns
DJ  0.1
SP  0.2
USDJPY  0.03
USDMXN  1.2

我有另一个数据帧dat2:

Country Class   Asset
USA E   DJ
USA E   SP
USA FX  USDJPY
USA FX  USDMXN

如何使用dat2为dat1创建索引; dat1和dat2有一个共同点 栏"资产"

>new_dat=dat_corr.merge(dat_class,on="Asset",how="right").set_index(['Country','‌​Class','Asset'])
>new_dat.shape
(89, 89) 
>temp1='UNITEDSTATES' 
>temp2='Equity'
>new_dat.loc[ (new_dat.index.get_level_values('Country').isin([temp1]) &   new_dat.index.get_level_values('Class').isin([temp2]))]'

这给了我[3行x 89列]。我的89栏是Equity / FX / FI / Commodities的混合体。如果我只想要美国股票和所有其他股票而不是enitre 89列,我该怎么做?所以我想如果我也可以为列创建索引并使用类似的方法吗?

1 个答案:

答案 0 :(得分:0)

也许这就是你要找的东西:

df1 = pd.DataFrame(np.array([
    ['DJ', 0.1],
    ['SP', 0.2],
    ['USDJPY', 0.03]]),
    columns=['Asset', 'Returns'])
df2 = pd.DataFrame(np.array([
    ['USA', 'E', 'DJ'],
    ['USA', 'E', 'SP'],
    ['USA', 'FX', 'USDJPY']]),
    columns=['Country', 'Class', 'Asset'])

df1.merge(df2, on="Asset")

产生

的输出
   Asset Returns Country Class
0      DJ     0.1     USA     E
1      SP     0.2     USA     E
2  USDJPY    0.03     USA    FX

如果您希望维护整数索引或者希望使用Asset作为主索引,并且根据@JBradley的建议,您的措辞不完全清楚,您可以这样做:

df1.merge(df2, on="Asset").set_index(['Country','Class','Asset'])

将为您提供如下所示的最终数据框:

   Asset Returns Country Class
      DJ     0.1     USA     E
      SP     0.2     USA     E
  USDJPY    0.03     USA    FX