【问题标题】:how to "rowise merge" pandas dataframes如何“逐行合并”熊猫数据框
【发布时间】:2019-12-02 17:24:50
【问题描述】:

我想合并 2 个 DataFrame,这样在新的 DataFrame 中,第一行 = df1 中的第 1 行,第二行是 df2 中的第一行等。

A=pd.DataFrame({'A':[1,3,5], 'B': [7,9,11]}, index = ['bs','ss','db'])
B=pd.DataFrame({'A':[2,4,6], 'B': [8,10,12]}, index = ['bs','ss','db'])

请注意,行标签和列标签完全相同,并且两个数据框具有相同的维度。

所以想要的输出应该是这样的

      A    B
bs_a  1    7
bs_b  2    8
ss_a  3    9
ss_b  4    10
db_a  5    11
db_b  6    12

我对 pandas 合并不熟悉,在查看文档后我仍然不知道如何做到这一点

【问题讨论】:

    标签: python pandas merge


    【解决方案1】:

    你可以用keysconcat,合并多个索引

    s=pd.concat([A,B],keys=['a','b']).sort_index(level=1)
    s.index=s.index.map('{0[1]}_{0[0]}'.format) 
    s
    Out[225]: 
          A   B
    bs_a  1   7
    bs_b  2   8
    db_a  5  11
    db_b  6  12
    ss_a  3   9
    ss_b  4  10
    

    【讨论】:

    • @user11638654u yw:-) 快乐编码
    【解决方案2】:

    你可以rename你的数据框的索引,然后append一个到另一个

    df = A.rename('{}_a'.format).append(B.rename('{}_b'.format)).sort_index()
    

    这给了

            A   B
    bs_a    1   7
    bs_b    2   8
    db_a    5   11
    db_b    6   12
    ss_a    3   9
    ss_b    4   10
    

    【讨论】:

      【解决方案3】:

      尝试使用pd.concat

      A.reset_index(inplace=True)
      B.reset_index(inplace=True)
      
      A['index']=A['index']+'_a'
      B['index']=B['index']+'_b'
      
      A.set_index("index",inplace=True)
      B.set_index("index",inplace=True)
      
      final_df = pd.concat([A,B]).sort_values(['A'],ascending=[True])
      final_df.index.name=''
      
      
              A   B
      bs_a    1   7
      bs_b    2   8
      ss_a    3   9
      ss_b    4   10
      db_a    5   11
      db_b    6   12
      

      【讨论】:

        猜你喜欢
        • 2014-01-08
        • 1970-01-01
        • 2013-09-26
        • 1970-01-01
        • 2017-06-01
        • 2019-03-17
        • 2020-05-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多