【问题标题】:create multiple index for a dataframe in pandas为熊猫中的数据框创建多个索引
【发布时间】:2015-03-22 16:48:36
【问题描述】:

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

【问题讨论】:

  • 抱歉,您要求合并Asset 列上的 2 个 dfs?你能显示想要的输出吗

标签: python pandas indexing


【解决方案1】:

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

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

【讨论】:

  • df1.merge(df2, on="Asset").set_index(['Country','Class','Asset']) 如果你想要 dat2 作为索引
  • @JBradley 非常正确。 OP 的措辞有点模棱两可,因为他们表示他们希望将Asset 设为“AN 索引”,而不是像“THE 索引”这样更明确的措辞。我会将您的评论添加为编辑。
  • 非常感谢您的回复。这正是我想要的(dat2 作为索引)。作为一个新手,我不明白为什么当 np.array 似乎直接与两个 pd.dataframes 一起工作时你必须使用它
  • 只是一个后续问题:是否可以使用 df1.ix['USA','E'] 仅选择 USA 和 E?
  • 我在这里找到了答案:stackoverflow.com/questions/20754746/… 但这导致了另一个问题。是否可以对行和列都有索引?
猜你喜欢
  • 2016-01-13
  • 2016-02-05
  • 2016-06-16
  • 1970-01-01
  • 2017-05-01
  • 2021-08-14
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
相关资源
最近更新 更多