Pandas - 合并两个数据帧并统一列集

时间:2018-01-07 12:37:26

标签: python pandas

鉴于两个独立的数据框,我希望将它们合并并统一一组连接的列。

示例:

In[1]: df1

Out[1]: 
   a_id     a_time a_val
0     1  100000000     a
1     2  200000000     b
2     3  300000000     c

In[10]: df2

Out[10]: 
   b_id     b_time b_val
0     1  100000000     d
1     2  150000000     e
2     3  350000000     f

我正在寻找的结果数据框如下

   id       time val
0   1  100000000   a
1   1  100000000   d
2   2  150000000   e
3   2  200000000   b
4   3  300000000   c
5   3  350000000   f

假设两个表都存在所有ID,则结果应为len(df1) + len(df2)

我正在使用.stack()查看一些结果,但我无法弄清楚如何在合并两个表时使其工作。

请注意时间可能相同,也可能不同。

2 个答案:

答案 0 :(得分:3)

我认为您需要df中的相同列,然后使用concat + sort_values + reset_index

cols = ['id', 'time', 'val']
df1.columns = cols
df2.columns = cols

df = pd.concat([df1, df2]).sort_values('id').reset_index(drop=True)

print (df)
   id       time val
0   1  100000000   a
1   1  100000000   d
2   2  200000000   b
3   2  150000000   e
4   3  300000000   c
5   3  350000000   f

答案 1 :(得分:3)

你也可以这样做:

In [45]: pd.concat([df.rename(columns=lambda x: re.sub(r'.*?_',' ',x))
                    for df in [df1,df2]],
                   ignore_index=True)
Out[45]:
    id       time  val
0    1  100000000    a
1    2  200000000    b
2    3  300000000    c
3    1  100000000    d
4    2  150000000    e
5    3  350000000    f