【问题标题】:Get difference of 2 dataframes with unequal length in Python [duplicate]在Python中获取长度不等的2个数据帧的差异[重复]
【发布时间】:2019-08-17 02:54:40
【问题描述】:

为此,我查看了所有互联网和 pandas 文档。

我有 2 个 pandas 数据帧(带有字符串值) 它们实际上有 14 列和 1667 行。

我需要比较它们并返回一个或多个较长的值而不是较短的值

   df1
0 X
1 Y
2 Z

   df2
0 X
1 Y

结果:

   df_diff
2 Z

我尝试了不同的合并和连接,也许我只是愚蠢,但无法使其工作。 这是比较 2 个数据帧并返回新数据帧中所有不相等行的函数的一部分。 如果您有整个功能的解决方案,请随时将其发布为答案。

【问题讨论】:

  • 反合并不起作用
  • 你是如何使用它的?你需要一个简单的isin
  • isin 不工作仅仅是因为我有多个列 (14) ,我可能也可以使用 unique 代替 isin 但同样对多列没有意义(抱歉上面的例子不清楚),我的主要问题是我需要知道每行的 14 列中的哪些值不同以及它在哪里。 Isin 只会告诉我值“a”是否在 DataFrame 中。我已经尝试过 isin,因为我发现了“反合并”和类似的问题。它不成功。
  • 也许我只是不清楚:我有 2 个 14 列和 1667 行的表。我需要编写一个脚本,逐行比较它们,以检查每列的哪一行中的值不同。这是我必须匹配的用户管理表。因此,如果一个用户在 df1 和 df2 但在另一列中,它说启用而不是禁用,我必须知道那在哪里。或者,如果用户在 d1 和 d2 中,但在另一列“姓氏”中,他的姓氏拼写不同于 df1 到 df2,我也必须知道
  • 我的另一个想法是使用 iterrows() 但我无法让它工作,下一个问题是表格不必等长(如果一个或多个用户是在一个表上丢失),所以我想我会写一个 if 语句来检查并根据它们是否相等长度来决定使用哪种方式......但再次无法在 2 个数据帧上使用 iterrows...... @yatu

标签: python python-3.x pandas dataframe


【解决方案1】:

这行得通吗?

set(df_1['columname']) - set(df_2['columnname'])

如果您想要完整数据集的差异,您可以这样做:

set(df_1.values.flatten()) - set(df_2.values.flatten())

【讨论】:

  • 不,因为我必须比较所有列(对不起,因为这个例子不清楚)
  • 反合并不起作用...
  • No 仍然不起作用,因为我不知道该值在我的数据集中的位置,我的数据库中的表中有 1667 行,因为这会告诉我缺少什么值,它不会告诉我在哪里,我还需要知道它是否是行中唯一不同的,但那是我问题的结尾部分,所以如果你能写出来,我就知道该值在 DataFrames 中的位置成为答案,遗憾的是集合和列表不符合顺序
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 2013-11-21
相关资源
最近更新 更多