我有一个数据框 DF1:
1 | 2 | 3 | 4 | ID |
---|---|---|---|---|
1 | 121 | 1313 | + | 102466751 |
2 | 112 | 133 | + | 6147 |
3 | 122 | 313 | - | 55207 |
4 | 212 | 413 | - | 113655 |
5 | 1012 | 343 | + | 79501 |
和另一个数据帧 DF2"
没有 | 合奏 | ID |
---|---|---|
1212 | ENSG00000146083 | 22838 |
1512 | ENSG00000198242 | 6147 |
1262 | ENSG00000134108 | 55207 |
1219 | ENSG00000167700 | 113655 |
1512 | ENSG00000070087 | 521 |
我正在尝试使用以下最终的 Dataframe DF3,它看起来像:
1 | 2 | 3 | 4 | ID |
---|---|---|---|---|
1 | 121 | 1313 | + | 102466751 |
2 | 112 | 133 | + | ENSG00000198242 |
3 | 122 | 313 | - | ENSG00000134108 |
4 | 212 | 413 | - | ENSG00000167700 |
5 | 1012 | 343 | + | 521 |
当且仅当 DF1.ID == DF2.ID 时,DF3 包含在 DF2.ensembl 上,否则 DF1.ID 保持不变。
我用 Python 写的:
DF3['ID'] = DF1['ID'].apply(lambda x: DF2['Ensembl'] if DF1['ID'] == DF2['ID'] else DF1['ID'])
值错误为:
ValueError: 只能比较标记相同的系列对象
有什么帮助吗?
答案 0 :(得分:0)
您可以合并到 df1
中,然后用 Ensmbl 列中的非 NaN 值替换 ID。
df3 = pd.merge(df1, df2, on="ID", how="left")
m = ~df3["Ensmbl"].isna()
df3.loc[m, "ID"] = df3.loc[m, "Ensmbl"]
print(df3[df1.columns])
打印:
1 2 3 4 ID
0 1 121 1313 + 102466751
1 2 112 133 + ENSG00000198242
2 3 122 313 - ENSG00000134108
3 4 212 413 - ENSG00000167700
4 5 1012 343 + 79501
注意:我假设最后一个 ID 是 79501 而不是 521(可能是拼写错误。)