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

3
给定两个不同的数据框,我想要将它们合并,并统一一组连接列。
例如:
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个回答

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

啊...我一直在努力研究.stack(),却错过了最简单的解决方案。谢谢! - bluesummers
如果您已经解决了问题,请接受@bluesummers的解决方案。 - whatsinthename

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接