![](/img/trans.png)
[英]Dropping rows in dataframe based on values in another dataframe
[英]Adding rows in dataframe based on values of another 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
。 例如,由于df2
中不包含ID的A,D和E,因此我想为这些ID添加一行。 附加的行应包含df2
不包含的id
,属性code
null值和df1
中的属性amt
存储值
结果应该是这样的:
id code name
0 B 1 9
1 C 12 10
2 A nan 5
3 D nan 8
4 E nan 11
如果能得到一些指导,我将不胜感激。
通过使用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
从df1
放下dups,然后追加df2
然后再放下更多dups,然后再次追加。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.