【问题标题】:Pandas, merge 2 dataframes [duplicate]熊猫,合并2个数据框[重复]
【发布时间】:2018-11-04 22:06:28
【问题描述】:

我实际上有 2 个数据帧,其中一个是这样的:

seq1_id seq2_id dN  dS  Dist1 Dist_brute  kingdom
seq1    seq2    45  56  23    455         eucaryota
seq6    seq9    34  43  34    453         procaryota
seq3    seq98   32  34  21    90          Virus
seq21   seq87   32  12  35    211         Virus

还有其他类似的:

seq1_id seq2_id dN  dS  Dist1 Dist_brute
seq1    seq2    45  56  23    455
seq4    seq12   78  45  32    789
seq3    seq98   32  34  21    90          
seq21   seq87   32  12  35    211 
seq45   seq90   21  23  12    123
seq6    seq9    34  43  34    453  

而我想做的是获得一个新的数据框,例如:

seq1_id seq2_id dN  dS  Dist1 Dist_brute   kingdom
seq1    seq2    45  56  23    455          eucaryota
seq4    seq12   78  45  32    789          NaN
seq3    seq98   32  34  21    90           Virus
seq21   seq87   32  12  35    211          Virus
seq45   seq90   21  23  12    123          NaN
seq6    seq9    34  43  34    453          procaryota

有人有想法吗? 谢谢:)

【问题讨论】:

  • 我觉得你应该看看答案here

标签: python python-3.x pandas merge


【解决方案1】:

对我来说,省略参数on 用于将所有列与left 合并:

df = df2.merge(df1, how='left')

如果需要为merge定义列:

df = df2.merge(df1, on=['seq1_id','seq2_id','dN','dS','Dist1','Dist_brute'], how='left')

print (df)
  seq1_id seq2_id  dN  dS  Dist1  Dist_brute     kingdom
0    seq1    seq2  45  56     23         455   eucaryota
1    seq4   seq12  78  45     32         789         NaN
2    seq3   seq98  32  34     21          90       Virus
3   seq21   seq87  32  12     35         211       Virus
4   seq45   seq90  21  23     12         123         NaN
5    seq6    seq9  34  43     34         453  procaryota

【讨论】:

  • 谢谢,但实际上我只在没有值而不是 NaN 的地方得到空白
  • @Benjamin - 有相同类型的列吗?合并列的print (df1.dtypes)print (df2.dtypes),这里是['seq1_id','seq2_id','dN','dS','Dist1','Dist_brute'] ?
  • 你的提议有效,谢谢:)
  • @Benjamin - 不客气!
猜你喜欢
  • 1970-01-01
  • 2018-07-18
  • 1970-01-01
  • 2021-07-28
  • 2017-11-13
  • 1970-01-01
  • 1970-01-01
  • 2017-11-26
相关资源
最近更新 更多