pandas 根据与另一 Dataframe 匹配的另一列获取对应列

htzpubme  于 2023-01-19  发布在  其他
关注(0)|答案(1)|浏览(125)

我想从两个 Dataframe 中找到匹配的值并返回第三个值,例如,如果cpg_symbol["Gene_Symbol"]diff_meth_kirp_symbol.index对应,我想将cpg_symbol.loc["Composite_Element_REF"]赋为索引。
我的代码返回了一个空 Dataframe 。

diff_meth_kirp.index = diff_meth_kirp.merge(cpg_symbol, left_on=diff_meth_kirp.index, right_on="Gene_Symbol")[["Composite_Element_REF"]]

示例:
diff_meth_kirp
| | 你好|我的|姓名|是|
| - ------|- ------|- ------|- ------|- ------|
| 第一次|无|1个|第二章|三个|
| 第二次|四个|五个|六个|七|
| 第三次|八个|九|十个|十一|
| 第四次|十二|十三|十四|十五|
| 第五次|十六|十七|十八|十九|
| 第六次|二十个|二十一|二十二|二十三|
cpg_symbol
| | 复合元件参考|基因_符号|
| - ------|- ------|- ------|
| | CG1|第一次|
| | CG2|第三次|
| | CG3|第五次|
| | cg4|第七次|
| | CG5|第九届|
| | CG6|第一次|
预期产出:
| | 你好|我的|姓名|是|
| - ------|- ------|- ------|- ------|- ------|
| CG1|无|1个|第二章|三个|
| CG2|八个|九|十个|十一|
| CG3|十六|十七|十八|十九|
| CG6|无|1个|第二章|三个|

juud5qan

juud5qan1#

你的代码对我来说很好用,但你可以试试这个版本:

out = (diff_meth_kirp.merge(cpg_symbol.set_index('Gene_Symbol'), 
                            left_index=True, right_index=True)
                     .set_index('Composite_Element_REF')
                     .rename_axis(None).sort_index())
print(out)

# Output
     Hello  My  name  is
cg1      0   1     2   3
cg2      8   9    10  11
cg3     16  17    18  19
cg6      0   1     2   3

输入 Dataframe :

data1 = {'Hello': {'First': 0, 'Second': 4, 'Third': 8, 'Fourth': 12, 'Fifth': 16, 'Sixth': 20},
         'My': {'First': 1, 'Second': 5, 'Third': 9, 'Fourth': 13, 'Fifth': 17, 'Sixth': 21}, 
         'name': {'First': 2, 'Second': 6, 'Third': 10, 'Fourth': 14, 'Fifth': 18, 'Sixth': 22},
         'is': {'First': 3, 'Second': 7, 'Third': 11, 'Fourth': 15, 'Fifth': 19, 'Sixth': 23}}
diff_meth_kirp = pd.DataFrame(data1)

data2 = {'Composite_Element_REF': {0: 'cg1', 1: 'cg2', 2: 'cg3', 3: 'cg4', 4: 'cg5', 5: 'cg6'},
         'Gene_Symbol': {0: 'First', 1: 'Third', 2: 'Fifth', 3: 'Seventh', 4: 'Ninth', 5: 'First'}}
cpg_symbol = pd.DataFrame(data2)

相关问题