如何仅为几列合并两个数据帧

时间:2018-06-06 10:27:00

标签: python pandas dataframe merge jupyter-notebook

任何方式合并两个数据帧,但不合并所有的列? 我有两个数据帧,我想将一列合并到另一个数据帧。 我的数据是这样的

In [1]: left = pd.DataFrame({'key1':['a','b','c'], 'key2':['1','2','3'], 'v1':['january','january','january']}, index=[0,5,8]); left
Out[1]: 
   key1 key2         v1
0   a      1    january
5   b      2    january
8   c      3    january

In [2]: right = pd.DataFrame({'key1':['a','b','c'], 'key2':['1','2','3'], 'v1':['1<0xA4EB>','1<0xA4EB>','1<0xA4EB>'], 'new_value':[23,346,435]}); right
Out[2]: 
    key1    key2        v1    new_value
0   a       1     1<0xA4EB>         23
1   b       2     1<0xA4EB>        346
2   c       3     1<0xA4EB>        435

In [3]: pd.merge(left, right[['key1', 'key2', 'new_value']], on=['key1', 'key2'])
Out[3]:
    key1  key2       v1     new_value
0   a     1     january           23
1   b     2     january          346
2   c     3     january          435

我选择了键列和新列,然后合并它们。 但我认为这种方式并不聪明。我想找到更简单的方法,如果有人知道这一点,请告诉我。

提前致谢。

1 个答案:

答案 0 :(得分:0)

在这种情况下,您似乎只想在其中一个数据框中添加新列。如果是这种情况,为什么不直接将您想要的列附加到数据帧1,并将日期帧2的索引设置为等于数据帧1索引,或者创建dataframe2的副本并重新索引它?这是一个示例,我只需将df2中所需的列附加到df1。 (请注意,为了节省时间,我没有从df2完全复制你的代码,但你会得到这个概念):

import pandas as pd
left = pd.DataFrame({'key1':['a','b','c'], 'key2':['1','2','3'], 'v1':['january','january', 'january']}, index=[0, 5, 8])
right = pd.DataFrame({'new_value': [23, 346, 435]})

copy = right.index = left.index
left['new_value'] = right['new_value']
print(left)

这是你的输出:

     key1 key2       v1  new_value
 0    a    1  january         23
 5    b    2  january        346
 8    c    3  january        435

我觉得您可能希望将此作为潜在选项,以便将索引与df1保持一致。您的解决方案有效,但这只是一种方法,如果由于某种原因需要特定顺序的第一个数据帧,请保持索引的顺序。