根据 Dataframe 中的公共列删除行索引
Delete row indices based on common columns in a Dataframe
我有以下两个数据帧 df1 和 df2
final raw st
abc 12 10
abc 17 15
abc 14 17
和
final raw
abc 12
abc 14
我的预期输出是
final raw st
abc 17 15
我想删除基于公共列值的行。
我的尝试:
df1.isin(df2)
这给了我布尔结果。另一件事,我试过了
df3 = pd.merge(df1, df2, on = ['final', 'raw'], how = 'inner')
以便我们获得 df1
和 df3
的所有公共列。
使用isin
时需要参考正确的列。
result = df1[~df1['raw'].isin(df2['raw'])]
您已关闭 merge
您只需要额外的步骤。首先,您需要执行外部联接以保留来自两个数据帧的所有行并启用 indicator
of merge
,然后过滤此指标以保留正确的值(来自 df2
)。最后,只保留来自 df1
:
的列
df3 = pd.merge(df1, df2, on = ['final', 'raw'], how='outer', indicator=True) \
.query("_merge == 'left_only'")[df1.columns]
print(df3)
# Output
final raw st
1 abc 17 15
我有以下两个数据帧 df1 和 df2
final raw st
abc 12 10
abc 17 15
abc 14 17
和
final raw
abc 12
abc 14
我的预期输出是
final raw st
abc 17 15
我想删除基于公共列值的行。
我的尝试:
df1.isin(df2)
这给了我布尔结果。另一件事,我试过了
df3 = pd.merge(df1, df2, on = ['final', 'raw'], how = 'inner')
以便我们获得 df1
和 df3
的所有公共列。
使用isin
时需要参考正确的列。
result = df1[~df1['raw'].isin(df2['raw'])]
您已关闭 merge
您只需要额外的步骤。首先,您需要执行外部联接以保留来自两个数据帧的所有行并启用 indicator
of merge
,然后过滤此指标以保留正确的值(来自 df2
)。最后,只保留来自 df1
:
df3 = pd.merge(df1, df2, on = ['final', 'raw'], how='outer', indicator=True) \
.query("_merge == 'left_only'")[df1.columns]
print(df3)
# Output
final raw st
1 abc 17 15