Skip to main content
 首页 » 编程设计

python之合并两个或多个不重叠的列

2025年05月04日26三少

跟进这篇文章: Merging two columns which don't overlap and create new columns

import pandas as pd 
 
df1 = pd.DataFrame([["2014", "q2", 2], 
                   ["2013", "q1", 1],], 
                   columns=('Year', 'Quarter', 'Value')) 
 
df2 = pd.DataFrame([["2016", "q1", 3],  
                    ["2015", "q1", 3]], 
                   columns=('Year', 'Quarter', 'Value')) 
 
 
print(df1.merge(df2, on='Year', how='outer')) 

结果:

  Year   Quarter_x  Value_x  Quarter_y  Value_y 
0  2014        q2        2       NaN     NaN 
1  2013        q1        1       NaN     NaN 
2  2016       NaN      NaN        q1     3 
3  2015       NaN      NaN        q1     3 

但我想得到这个:

   Year    Quarter   Value  
0  2014        q2        2       
1  2013        q1        1      
2  2016        q1        3 
3  2015        q1        3 

注意:这不会产生预期的结果... :(

print(df1.merge(df2, on=['Year', 'Quarter','Value'], how='outer').dropna()) 
 
   Year Quarter  Value 
0  2014      q2      2 
1  2013      q1      1 

...使用“左”或“右”或内部也不要削减它。

请您参考如下方法:

不确定这里发生了什么,但如果我知道

df1.merge(df2, on=['Year', 'Quarter', 'Value'], how='outer').dropna() 

我得到:

   Year Quarter  Value 
0  2014      q2    2.0 
1  2013      q1    1.0 
2  2016      q1    3.0 
3  2015      q1    3.0 

您可能想看一下 merge, join & concat docs .

最“直观”的方法可能是 .append() :

df1.append(df2) 
 
   Year Quarter  Value 
0  2014      q2    2.0 
1  2013      q1    1.0 
2  2016      q1    3.0 
3  2015      q1    3.0 

如果您查看源代码,您会发现它在幕后调用了 concat。

Merge 非常有用,适用于您的列 具有重叠值的情况。