python - 合并具有相同值的两列的数据
问题描述
我有一个 CSV 文件,其中 df1 中的 column1 (ensembl_gene_id) 和 df2 中的 column1 (gene1) 在几行中具有相同的值。我想合并具有相同值的 df1 (column1) 和 df2(column2) 的数据。我尝试了下面给出的脚本(我意识到代码有太多错误):
import os
import pandas as pd
df=pd.DataFrame()
for item in os.listdir('./'):
if item.endswith('.csv'):
df1 = pd.read_csv('gene1-protein.csv')
df2 = pd.read_csv('gene1.csv')
df = pd.Dataframe.merge(df1, df2, on=['ensembl_gene_id', 'gene1']
print(df)
我的文件看起来像 -
df1
ensembl_gene_id hgnc_symbol gene_biotype
ENSG00000000419 DPM1 protein_coding
ENSG00000000938 FGR protein_coding
ENSG00000000938 FGR protein_coding
ENSG00000001084 GCLC protein_coding
df2
gene1
ENSG00000000419.11
ENSG00000000938.11
ENSG00000001084.9
ENSG00000001084.9
如何将我的数据合并到具有相同值的 df1 (column1) 和 df2(column2) 的单独 csv 文件中?
我的预期结果应该看起来像 -
gene1 ensembl_gene_id hgnc_symbol gene_biotype
ENSG00000000419.11 ENSG00000000419 DPM1 protein_coding
ENSG00000000938.11 ENSG00000000938 FGR protein_coding
ENSG00000000938.11 ENSG00000000938 FGR protein_coding
ENSG00000001084.9 ENSG00000001084 GCLC protein_coding
解决方案
好的,如果你真的需要保留你的副本,这就是你可以做到的。(假设 df2 中点之后的值对于给定的 ensembl_gene_id 始终相同)
# ----- just to reproduce the dataframes
import pandas as pd
df1_s = "ensembl_gene_id hgnc_symbol gene_biotype\n\
ENSG00000000419 DPM1 protein_coding\n\
ENSG00000000938 FGR protein_coding\n\
ENSG00000000938 FGR protein_coding\n\
ENSG00000001084 GCLC protein_coding"
df2_s = "gene1\n\
ENSG00000000419.11\n\
ENSG00000000938.11\n\
ENSG00000001084.9\n\
ENSG00000001084.9"
df1 = pd.DataFrame([i.split() for i in df1_s.split("\n")])
df1.columns = df1.iloc[0]
df1.drop(0, inplace=True)
df1.set_index("ensembl_gene_id", inplace=True)
df2 = pd.DataFrame([i.split() for i in df2_s.split("\n")])
df2.columns = df2.iloc[0]
df2.drop(0, inplace=True)
# -------------------------------------------------
# make the index of df2 similar to df1
df2.set_index(df2.gene1.str.split(".").str[0], inplace=True)
# append the values
# (you need to drop duplicates since "same-index-values" are propagated automatically)
df1["gene1"] = df2["gene1"].drop_duplicates()
print(df1)
>>> hgnc_symbol gene_biotype gene1
>>> ensembl_gene_id
>>> ENSG00000000419 DPM1 protein_coding ENSG00000000419.11
>>> ENSG00000000938 FGR protein_coding ENSG00000000938.11
>>> ENSG00000000938 FGR protein_coding ENSG00000000938.11
>>> ENSG00000001084 GCLC protein_coding ENSG00000001084.9
推荐阅读
- python - Python中的int到日期时间
- antd - 自定义 ant.design 组件样式
- terminal - ng gs services/post module=app.module 在 Angular 7 中不起作用
- hybris - Hybris 热文件夹导入“暂停”
- angular - 离子服务显示空白页
- reactjs - InvalidCharacterError:无法在“文档”上执行“createElement”:提供的标签名称(“/static/media/index.c6592bb6.ts”)不是有效名称
- java - Exception + Apache derby + ERROR XSDB0: Unexpected exception on in-memory page Page(89,Container(0, 560)) Apache derby java
- three.js - 如何围绕圆柱制作圆形波浪图案?
- wso2 - 如何修复“TargetHandler I/O 错误:一般 SSLEngine 问题”
- java - 每个任务结果的单独页码