(注意:下面的“样本数据”部分更简洁)
我有一个熊猫指数:
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
答案 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