熊猫-合并数据框

时间:2019-10-01 10:34:11

标签: python pandas dataframe

我是熊猫的新手,我想合并两个数据框,但是我不确定如何正确地做到这一点。所以我有两个数据帧df和df1,其中df1是df的子集。我对df1执行了不同的操作,并且有新的列,我想将其合并回df。

   df
   Index col1 col2  col3                  
     1    a    1234  5a
     2    b    3456  c4
     3    c    3613  9y
     4    d    9103  0l
     5    e    8133  9m
     6    f    6790  7h

  df1
  Index col1 col2  col3            
     3    c    3613  9y
     5    e    8133  9m
     6    f    6790  7h

我先从df和df1开始,然后对df1进行操作,结果是:

    df1
    Index col1 col2  col3  col4  col5  
     3    c    3613  9y    qwrt  hkjg
     5    e    8133  9m    asdf  jgnm
     6    f    6790  7h    asdf  sajf

所以我现在的问题是我如何基于col1将df1合并回df,以提供类似的信息(基本上将nans添加到不属于df1的列中,并保留原始数据帧df的顺序)

   Index col1 col2  col3  col4   col5 
     1    a    1234  5a     nan   nan
     2    b    3456  c4     nan   nan
     3    c    3613  9y     qwrt  hkjg           
     4    d    9103  0l     nan   nan
     5    e    8133  9m     asdf  jgnm
     6    f    6790  7h     asdf  sajf

4 个答案:

答案 0 :(得分:2)

IIUC,您需要这个

df.merge(df1, how='outer')

输出

index   col1    col2    col3    col4    col5
0   1   a   1234    5a  NaN     NaN
1   2   b   3456    c4  NaN     NaN
2   3   c   3613    9y  qwrt    hkjg
3   4   d   9103    0l  NaN     NaN
4   5   e   8133    9m  asdf    jgnm
5   6   f   6790    7h  asdf    sajf

答案 1 :(得分:0)

这就是您需要做的!!

pd.concat([df,df1], axis=0, ignore_index=True)

答案 2 :(得分:0)

您可以执行此操作,其中“ col4”和“ col5”是在操作后添加的列

df = pd.DataFrame([('1', 'a', '1234', '5a'), ('2', 'b', '3456', 'c4'), ('3', 'c', '3613', '9y'), ('4', 'd', '9103', '0l'), ('5', 'e', '8133', '9m'), ('6', 'f', '6790', '7h')], columns=('Index', 'col1', 'col2', 'col3'))
df1 = pd.DataFrame([('3', 'c', '3613', '9y', 'qwrt', 'hkjg'), ('5', 'e', '8133', '9m', 'asdf', 'jgnm'), ('6', 'f', '6790', '7h', 'asdf', 'sajf')], columns=('Index', 'col1', 'col2', 'col3', 'col4', 'col5'))
df = df.set_index("Index")
df1 = df1.set_index("Index")

pd.concat([df,df1[["col4", "col5"]]], axis=1, sort=False)

如果您还想将col1和col2的值从df1更新为df2,请使用

df.update(df1)
pd.concat([df,df1[["col4", "col5"]]], axis=1, sort=False)

答案 3 :(得分:0)

如果您使用数据框的子集,则无需合并:

df = pd.DataFrame(np.random.randint(10, size=(4, 2)), columns=list('AB'))
print(df)

输出:

   A  B
0  5  0
1  7  7
2  7  4
3  8  4

您可以loc子集并添加新列:

df['C'] = df.loc[1:2, 'B'] + 1
print(df)

输出:

   A  B    C
0  5  0  NaN
1  7  7  8.0
2  7  4  5.0
3  8  4  NaN