可能之前已经问过了,买吧,找了30分钟也找不到.
我有两个相同列的Pandas 数据框.除了一列之外,其他值都匹配,我想执行一个完整的外连接,如果两个值都存在,则只获得一个值,如果其中一个存在,则只获得一个值.有许多匹配的列,因此我更喜欢不必 for each 匹配的列应用某些内容的解决方案.
示例 如果值在两个df中,则所有列都相同,只是频率不同:
Gene GeneID Frequency
0 AA 1 10
1 BB 2 15
2 CC 3 12
Gene GeneID Frequency
0 AA 1 20
1 DD 4 29
代码:
import pandas as pd
t1 = [{"Gene": "AA", "GeneID": "1" , "Frequency": 10},
{"Gene": "BB", "GeneID": "2" , "Frequency": 15},
{"Gene": "CC", "GeneID": "3" , "Frequency": 12}]
t2 = [{"Gene": "AA", "GeneID": "1" , "Frequency": 20},
{"Gene": "DD", "GeneID": "4" , "Frequency": 29}]
f1 = pd.DataFrame(t1)
f2 = pd.DataFrame(t2)
m = pd.merge(f1,f2,on=['Gene','Gene'],how='outer')
结果是:
Gene GeneID_x Frequency_x GeneID_y Frequency_y
0 AA 1 10.0 1 20.0
1 BB 2 15.0 NaN NaN
2 CC 3 12.0 NaN NaN
3 DD NaN NaN 4 29.0
现在ID在genID_x或genID_y中.我想要以下内容:
Gene GeneID Frequency_x Frequency_y
0 AA 1 10.0 20.0
1 BB 2 15.0 NaN
2 CC 3 12.0 NaN
3 DD 4 NaN 29.0
当然,我可以在需要的地方迭代和填充genID,但是还有更多匹配的列.肯定有更好的解决方案.我还try 了GROUP BY和Aggregate的Conat.这是可行的,但是如果只有一个值,我看不出频率来自第一个df还是第二个df.
谢谢.