我有一个数据帧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列,我该怎么做?所以我想如果我也可以为列创建索引并使用类似的方法吗?
答案 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