python - Python:根据索引列上另一个数据框中的另一列替换数据框中的一列
问题描述
我有一个数据框 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 |
其中 DF3 包含在 DF2.ensembl 上当且仅当 DF1.ID == DF2.ID 否则 DF1.ID 保持不变。
我在 Python 中写道:
DF3['ID'] = DF1['ID'].apply(lambda x: DF2['Ensembl'] if DF1['ID'] == DF2['ID'] else DF1['ID'])
值错误是:
ValueError:只能比较标签相同的系列对象
有什么帮助吗?
解决方案
您可以合并df1
,然后将 ID 替换为 Ensmbl 列中的非 NaN 值。
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(可能是错字。)
推荐阅读
- html - 覆盖内联css?
- c# - 并发异常 ASP MVC C#
- sql - 无法使用 WHERE 过滤(无法访问 ARRAY 类型的值的字段小时
#standardSQL SELECT DISTINCT geoNetwork.country FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX
- javascript - 如何正确添加 Google ReCaptcha
- java - Java比较对象的效率
- apache - Apache Directory Studio 未打开
- ios - 如何使用情节提要为导航栏中的视图设置宽度和高度约束?
- google-sheets - 谷歌表格,重复的文字
- html - 如何在 html 和 css 中制作线条
- kotlin - Kotlin kapt 参数一个键的多个值