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

create multiple index for a dataframe in pandas

我有一个数据框 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 的混合。如果我只想要美国股票与所有其他股票的对比,而不是整个 89 列,我该怎么做?所以我想我是否也可以为列创建索引并使用类似的方法?

也许这就是您要找的:

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