根据另一个数据帧的值在数据框中添加行

时间:2017-10-09 21:05:09

标签: python pandas dataframe

我有以下两个数据帧。请注意,' amt'按' id'分组在两个数据帧中。

  df1

   id  code  amt
0   A    1    5
1   A    2    5
2   B    3    10
3   C    4    6
4   D    5    8
5   E    6    11

  df2 

    id  code amt
0   B   1    9
1   C   12   10

我想在df2中为id中未包含的每个df1 df2添加一行。例如,由于Id的A,D和E未包含在df2中,我想为这些ID添加一行。附加行应包含id中未包含的df2,属性code的空值和属性df1的{​​{1}}中的存储值

结果应该是这样的:

amt

如果我能得到一些指导,我将非常感激。

2 个答案:

答案 0 :(得分:3)

使用pd.concat

df=df1.drop('code',1).drop_duplicates()
df[~df.id.isin(df2.id)]
pd.concat([df2,df[~df.id.isin(df2.id)]],axis=0).rename(columns={'amt':'name'}).reset_index(drop=True)
Out[481]: 
   name  code id
0     9   1.0  B
1    10  12.0  C
2     5   NaN  A
3     8   NaN  D
4    11   NaN  E

答案 1 :(得分:3)

df1删除重复内容,然后附加df2,然后删除更多重复内容,然后重新附加。

df2.append(
    df1.drop_duplicates('id').append(df2)
       .drop_duplicates('id', keep=False).assign(code=np.nan),
    ignore_index=True
)

  id  code  amt
0  B   1.0    9
1  C  12.0   10
2  A   NaN    5
3  D   NaN    8
4  E   NaN   11

轻微变化

m = ~np.in1d(df1.id.values, df2.id.values)
d = ~df1.duplicated('id').values

df2.append(df1[m & d].assign(code=np.nan), ignore_index=True)

  id  code  amt
0  B   1.0    9
1  C  12.0   10
2  A   NaN    5
3  D   NaN    8
4  E   NaN   11