我有这个数据帧DF1
emp_no no_children status
1 3 3
2 2 2
23 5 5
和另一个DF2
emp_no no_children status
1 3 3
2 2 2
3 5 5
我正在尝试基于DF1和DF2创建一个新的数据框
emp_no no_children status
23 5 5
新DF应该在DF2中不包含emp_no
答案 0 :(得分:2)
使用emp_no
列的ne
并使用df1
数据帧的切片。
df1.loc[df1['emp_no'].ne(df2['emp_no']),:]
emp_no no_children status
2 23 5 5
答案 1 :(得分:1)
您可以将merge
与how='left'
和indicator=True
结合使用,然后过滤df1
中存在的行。
In [277]: df1.merge(df2, indicator=True, how='left'
).query('_merge == "left_only"'
).drop('_merge', 1)
Out[277]:
emp_no no_children status
2 23 5 5
详细信息
In [278]: df1.merge(df2, indicator=True, how='left')
Out[278]:
emp_no no_children status _merge
0 1 3 3 both
1 2 2 2 both
2 23 5 5 left_only
In [279]: df1.merge(df2, indicator=True, how='left').query('_merge == "left_only"')
Out[279]:
emp_no no_children status _merge
2 23 5 5 left_only
答案 2 :(得分:0)
这将给出df1行,其中df2 ['emp_no']中找不到df1 ['emp_no'](〜为负):
df1.loc[~df1['emp_no'].isin(df2['emp_no'])]