【问题标题】:Merging two or more columns which don't overlap合并两个或多个不重叠的列
【发布时间】:2016-10-14 13:11:21
【问题描述】:

跟进这篇文章: 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

...使用'left'或right'或inner也不要削减它。

【问题讨论】:

    标签: python pandas dataframe merge


    【解决方案1】:

    pandas concat 更适合这个。

    pd.concat([df1, df2]).reset_index(drop=True)
    
       Year Quarter  Value
    0  2014      q2      2
    1  2013      q1      1
    2  2016      q1      3
    3  2015      q1      3
    

    concat 旨在将一个数据帧与另一个数据帧相邻放置,同时保持索引或列对齐。在默认情况下,它保持列对齐。考虑到您的示例数据框,列是对齐的,并且您声明的预期输出显示 df2 正好位于列对齐的 df1 之后。您所要求的每个方面都正是 concat 旨在提供的。我所做的只是将您指向一个适当的函数。

    【讨论】:

      【解决方案2】:

      您正在寻找附加功能:

      df_final = df1.append(df2)
      

      【讨论】:

        【解决方案3】:

        不确定这里发生了什么,但如果我这样做了

        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 很有用,适用于 columns 具有重叠值的情况。

        【讨论】:

          猜你喜欢
          • 2018-06-04
          • 1970-01-01
          • 1970-01-01
          • 2021-09-13
          • 2019-03-05
          • 2021-05-29
          • 2018-08-16
          • 2016-10-14
          • 1970-01-01
          相关资源
          最近更新 更多