我想合并两个数据流。其中之一是“命中”数据,其中我有许多蛋白质ids。第二种是数据库数据,它包含所有已知的蛋白质及其功能。见下面的例子。
目标是将我的蛋白质命中与数据库dataframe中的相应行关联起来。更复杂的是,我的一些点击在一行中包含多个蛋白质(下面是Protein_3A;Protein_B )。是否有一种方法可以使用在操作中合并这些数据帧,以便将蛋白质3的行匹配,如下面的df所示,尽管数据库数据中只存在一个子类型(Protein_3B)?
示例启动dataframes
hit_df = pd.DataFrame({"Hits": ["Protein_1", "Protein_2", "Protein_3A; Protein_3B", "Protein_8", "Protein_5"]})
database_df = pd.DataFrame({"Proteins": ["Protein_1", "Protein_2", "Protein_3B", "Protein_4", "Protein_9", "Protein10"],"Function": ["FuncX", "FuncY", "FuncZ", "Unknown", "Unkwown", "FuncA"]})期望的结果数据
matched_results_df = pd.DataFrame({"Hits":["Protein_1", "Protein_2", "Protein_3B"], "Function":["FuncX", "FuncY", "FuncZ"]})发布于 2022-11-05 17:31:09
首先,根据新行上的;符号拆分每个表达式。
hit_df= hit_df["Hits"].str.split("; ", expand = False).explode().to_frame()
print(hit_df)
Hits
0 Protein_1
1 Protein_2
2 Protein_3A
2 Protein_3B
3 Protein_8
4 Protein_5然后使用isin函数,只得到匹配值。
matched_results_df = database_df[database_df['Proteins'].isin(hit_df['Hits'])]https://stackoverflow.com/questions/74329948
复制相似问题