在 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
我有一个数据框 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