我有两个 Dataframe 结构如下:
Df1:
| 基因ID|围棋术语|
| --------------|--------------|
| 识别码1|GO1|
| 识别码1|GO2|
| ID2|GO1|
| ID2|GO3|
| ID3|GO1|
| ID4|GO1|
Df2:
| MP术语|议员姓名|基因ID|
| --------------|--------------|--------------|
| MP1|姓名1|ID1、ID2、ID4|
| MP2|姓名2|ID1、ID3|
| MP3|姓名3|ID2|
现在,我想创建第三个 Dataframe ,以这种方式将前两个 Dataframe 组合在一起:
Df3:
| 基因ID|MP术语|GO术语|
| --------------|--------------|--------------|
| 识别码1|MP1、MP2|GO1、GO2|
| ID2|MP1、MP3|GO1、GO3|
| ID3|MP2|GO1|
| ID4|MP1|GO1|
第一列是Df 1的id(不重复),在第二列中,来自Df 2的mp与id相关联,在第三列中,来自Df 1的go项与基因id相关联。我可以用嵌套循环的for循环来实现,但我知道这是一种非常低效的方法。我想知道如何避免循环。非常感谢你的帮助。
2条答案
按热度按时间u1ehiz5o1#
您可以使用
groupby.agg
将具有公共ID的行连接为字符串,并使用split
+explode
扩展到多行。最后merge
这两个部分来对齐您的输出:输出:
如果您对“MP names”列不感兴趣,请在第二个
groupby.agg
中切片:输出:
ni65a41a2#
使用
concat
和GroupBy.agg
的聚合以及join
和df2
中,
拆分的DataFrame.explode
值:如果需要按
join
聚合所有列,请用途: