我有以下两个数据帧。请注意,' 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
如果我能得到一些指导,我将非常感激。
答案 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