如何合并/加入pandas索引类型

时间:2017-02-19 21:15:07

标签: pandas

问题陈述

(注意:下面的“样本数据”部分更简洁)

我有一个熊猫指数:

Index(['RNF14', 'UBE2Q1', 'UBE2Q2', 'RNF10', 'RNF11', 'RNF13', 'REM1', 'REM2',
       'C16orf13', 'MVB12B',
       ...
       'MFAP1', 'CWC22', 'PLRG1', 'PRPF40A', 'SAP30BP', 'PIK3R1', 'MYPN',
       'RBMX2', 'USP12', 'CHERP'],
      dtype='object', length=854)

它代表一个键列表,Index中这些键的索引对我来说很重要。 (例如nodes.get_loc('PLRG1') # => 846

现在我还有一个观察列表,每个观察都有一个关联的密钥(下面是df.info()的结果):

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 58 entries, 0 to 57
Data columns (total 2 columns):
name     58 non-null object
prize    58 non-null float64
dtypes: float64(1), object(1)

name列是我的索引中的一列名称。我想使用我的Dataframe和Index进行连接,基本上与Dataframe合并完全相同,这样我的Dataframe中的每一行都从我的索引中获取相应的数字ID。

我无法使用Dataframe.merge:

ValueError: can not merge DataFrame with instance of type <class 'pandas.indexes.base.Index'>

我该怎么办?

一个更大的问题:大熊猫Index的类型是什么?我觉得我可能会误用它,尽管事实上,从抽象的角度来看,我在这里需要的是一个“索引”。

一些示例数据:

index = pd.Index(['RNF14', 'UBE2Q1', 'UBE2Q2', 'RNF10'])

# dataframe looks like: 
    name    prize
0   RNF10   0.81
1   UBE2Q2  0.29
2   RNF14   2.68

# result I'm looking for: 
    name    prize
3   RNF10   0.81
2   UBE2Q2  0.29
0   RNF14   2.68

1 个答案:

答案 0 :(得分:1)

您可以将DataFrame的set_index方法与Index的get_indexer方法结合使用:

import pandas as pd

index  = pd.Index(['RNF14', 'UBE2Q1', 'UBE2Q2', 'RNF10']) 
df     = pd.DataFrame([['RNF10', 0.81],['UBE2Q2',0.29],['RNF14',2.68]], columns=['name','prize'])
new_df = df.set_index(index.get_indexer(df['name']))

这将给出

In [5]: df
Out[5]: 
     name  prize
0   RNF10   0.81
1  UBE2Q2   0.29
2   RNF14   2.68

In [6]: new_df
Out[6]:
     name  prize
3   RNF10   0.81
2  UBE2Q2   0.29
0   RNF14   2.68