当前位置: 首页 > 面试题库 >

Python-pandas获取不在其他数据框中的行

夹谷野
2023-03-14
问题内容

我有两个pandas数据框,它们有一些共同点。

假设dataframe2dataframe1的子集。

如何获取dataframe1中不在dataframe2中的行?

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]})

问题答案:

一种方法是存储两个df的内部合并结果,然后我们可以简单地在一行的值不在此通用值中时选择行:

In [119]:

common = df1.merge(df2,on=['col1','col2'])
print(common)
df1[(~df1.col1.isin(common.col1))&(~df1.col2.isin(common.col2))]
   col1  col2
0     1    10
1     2    11
2     3    12
Out[119]:
   col1  col2
3     4    13
4     5    14

编辑

你发现的另一种方法是使用isin它将产生NaN可删除的行:

In [138]:

df1[~df1.isin(df2)].dropna()
Out[138]:
   col1  col2
3     4    13
4     5    14

但是,如果df2不能以相同的方式开始行,那么它将行不通:

df2 = pd.DataFrame(data = {'col1' : [2, 3,4], 'col2' : [11, 12,13]})

将产生整个df:

In [140]:

df1[~df1.isin(df2)].dropna()
Out[140]:
   col1  col2
0     1    10
1     2    11
2     3    12
3     4    13
4     5    14


 类似资料:
  • 问题内容: 假设我有一个像这样的数据框 原始表更加复杂,具有更多的列和行。 我想获得满足某些条件的第一行。例子: 获取A> 3的第一行(返回第2行) 获取A> 4 AND B> 3的第一行(返回第4行) 获取第一行,其中A> 3 AND(B> 3 OR C> 2)(返回第2行) 但是,如果没有满足特定条件的行,那么我想在我按A降序排序(或者其他情况下按B,C等排序)后得到第一行 获取A> 6的第一

  • 问题内容: 我有一个带有几列的Python pandas数据框。现在,我想将所有值复制到一个列中,以获取一个values_count结果alle值。最后,我需要string1,string2,n的总数。最好的方法是什么? 问题答案: 如果性能是一个问题,请尝试: 或者它变成一个再使用 对于具有少量列的较大(长)DataFrame,循环可能比堆栈快: 此外,还有一个numpy解决方案: 小 长

  • 问题内容: 我有两个看起来像这样的数据框: 现在,如果我利用pandas .isin函数,我可以做一些漂亮的事情 列和from存在于while中不 我的问题是:是否有人知道为df_2中但不存在于df_1中的列返回列标签的方法 像这样的东西 先感谢您! 问题答案: 熊猫索引对象具有类似集合的属性,因此您可以直接执行以下操作: 您还可以使用运算符来计算交集,并集和对称差: 过去存在差异的运算符,现已弃

  • 问题内容: 我从CSV文件加载了一些机器学习数据。前两列是观察值,其余两列是要素。 目前,我执行以下操作: 它给出了类似的东西: 我想两个dataframes切片此数据框:包含列一个和和包含一个列,和。 不可能写这样的东西 我不确定最好的方法是什么。我需要吗? 顺便说一下,我发现数据帧索引非常不一致:允许,但不允许。另一方面,不允许,但允许。是否有实际原因?如果列是由Int索引的,这确实令人困惑,

  • 问题内容: 如果数据如下所示: 我想复制IsHoliday等于TRUE的行,我可以这样做: 但是是否有更好的方法来执行此操作,因为我需要将假日行重复5次,如果使用上述方法,则必须追加5次。 问题答案: 您可以放入列表中,然后执行以下操作:

  • 问题内容: 我正在生成许多具有相同形状的数据框,并且我想将它们相互比较。我希望能够获得整个数据框的均值和中位数。 然后,我想获得这两个数据帧的均值。 最简单的方法是什么? 为了澄清一下,当所有数据框的索引和列完全相同时,我想获取每个特定单元的平均值。 因此,在我给出的示例中,平均值为(0.001182 + 0.000001)/ 2 = 0.0005915。 问题答案: 假设两个数据框具有相同的列,