我有两个pandas数据帧,它们有一些共同的行。
假设dataframe2是dataframe1的子集。
如何获取不在dataframe2中的dataframe1行?
df1 = pandas.DataFrame(data = {'col1' : [1, 2, 3, 4, 5], 'col2' : [10, 11, 12, 13, 14]})
df2 = pandas.DataFrame(data = {'col1' : [1, 2, 3], 'col2' : [10, 11, 12]})
Tags:
假设索引在数据帧中是一致的(不考虑实际的列值):
一种方法是存储两个df的内部合并结果,然后当一列的值不在此公共值中时,我们可以简单地选择行:
编辑
您发现的另一种方法是使用
isin
,它将生成NaN
行,您可以删除这些行:但是,如果df2不以相同的方式开始行,则这将不起作用:
将生成整个df:
当前选定的解决方案产生不正确的结果。为了正确解决这个问题,我们可以执行从
df1
到df2
的左连接,确保首先只获取df2
的唯一行。首先,我们需要修改原始数据框以添加包含数据的行[3,10]。
执行左联接,消除
df2
中的重复项,以便df1
的每一行与df2
的整整一行联接。使用参数indicator
返回一个额外的列,指示该行来自哪个表。创建布尔条件:
为什么其他解决方案是错误的
一些解决方案会犯同样的错误——它们只检查每一列中的每个值是否独立,而不是同一行中的每个值是否在一起。添加最后一行(该行是唯一的,但具有来自
df2
的两列的值)将暴露错误:此解决方案会得到相同的错误结果:
相关问题 更多 >
编程相关推荐