如何“ rowise合并” pandas数据帧

时间:2019-07-24 14:08:08

标签: python pandas merge

我想合并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

我不熟悉熊猫合并,在查阅文档后,我仍然不知道该怎么做

3 个答案:

答案 0 :(得分:8)

您可以对concat进行keys,合并多个索引

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

答案 1 :(得分:1)

您可以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

答案 2 :(得分:0)

尝试使用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