我有两个DataFrames
:
import pandas as pd
import io
from scipy import stats
ctrl=u"""probegenes,sample1,sample2,sample3
1415777_at Pnliprp1,20,0.00,11
1415884_at Cela3b,47,0.00,100
1415805_at Clps,17,0.00,55
1115805_at Ckkk,77,10.00,5.5
"""
df_ctrl = pd.read_csv(io.StringIO(ctrl),index_col='probegenes')
test=u"""probegenes,sample1,sample2,sample3
1415777_at Pnliprp1,20.1,10.00,22.3
1415805_at Clps,7,3.00,1.5
1415884_at Cela3b,47,2.01,30"""
df_test = pd.read_csv(io.StringIO(test),index_col='probegenes')
他们看起来像这样:
In [35]: df_ctrl
Out[35]:
sample1 sample2 sample3
probegenes
1415777_at Pnliprp1 20 0 11.0
1415884_at Cela3b 47 0 100.0
1415805_at Clps 17 0 55.0
1115805_at Ckkk 77 10 5.5
In [36]: df_test
Out[36]:
sample1 sample2 sample3
probegenes
1415777_at Pnliprp1 20.1 10.00 22.3
1415805_at Clps 7.0 3.00 1.5
1415884_at Cela3b 47.0 2.01 30.0
我想:
index
DataFrame
DataFrame
。因此,最后我得到两个新的DataFrame
:
new_df_ctrl
sample1 sample2 sample3
probegenes
1415884_at Cela3b 47 0 100.0
1415805_at Clps 17 0 55.0
1415777_at Pnliprp1 20 0 11.0
new_df_test
sample1 sample2 sample3
probegenes
1415884_at Cela3b 47.0 2.01 30.0
1415805_at Clps 7.0 3.00 1.5
1415777_at Pnliprp1 20.1 10.00 22.3
答案 0 :(得分:3)
您可以将join
与参数how='inner'
一起使用以获取公共索引。然后使用这个公共索引重新索引每个数据帧。
idx = df_ctrl.join(df_test, rsuffix='_', how='inner').index
>>> df_ctrl.reindex(idx)
sample1 sample2 sample3
probegenes
1415777_at Pnliprp1 20 0 11
1415805_at Clps 17 0 55
1415884_at Cela3b 47 0 100
>>> df_test.reindex(idx)
sample1 sample2 sample3
probegenes
1415777_at Pnliprp1 20.1 10.00 22.3
1415805_at Clps 7.0 3.00 1.5
1415884_at Cela3b 47.0 2.01 30.0
答案 1 :(得分:1)
您可以使用pd.Index.intersection()
并使用.loc[]
或.reindex()
进行选择。使用.sort_values()
上的index
获取所需的排序:
idx = df_ctrl.index.intersection(df_test.index).sort_values(ascending=False)
df_ctrl.loc[idx]
sample1 sample2 sample3
probegenes
1415884_at Cela3b 47 0.0 100.0
1415805_at Clps 17 0.0 55.0
1415777_at Pnliprp1 20 0.0 11.0
df_test.loc[idx]
sample1 sample2 sample3
probegenes
1415884_at Cela3b 47.0 2.01 30.0
1415805_at Clps 7.0 3.00 1.5
1415777_at Pnliprp1 20.1 10.00 22.3