【问题标题】:Selecting rows from DF1 where column values match values from a column from DF2从 DF1 中选择行,其中列值与 DF2 中的列中的值匹配
【发布时间】:2021-03-28 22:20:27
【问题描述】:

这个问题已经解决了(我认为)。 Excel是问题所在,毕竟不是python。下面的代码应该可以满足我的需要,而且似乎不会删除行。

Rows Highlighted in yellow are the rows I want to select in DF1. The selection should be made based on the values in column_2 of DF1 that match the values of column_1 of DF2

经过大量跟踪和错误/搜索,这是我在 python 中使用 Pandas 包的首选解决方案:

NEW_MATCHED_DF1 = DF1.loc[DF1['column 2'].isin(DF2['column_1'])]

我看到的问题是,当我将结果与执行相同操作时在 excel 中发生的结果进行比较时,我得到的结果几乎翻了一番,而且我认为我的 python 技术正在删除重复项。当然,有可能我在excel中做错了,或者excel由于其他原因不正确,但这是我过去验证过的,并且对excel更加熟悉,所以我怀疑它更有可能是我在 python 中做错了什么。 EXCEL毕竟是问题!! :/

最终,我想使用 python 来选择 DF1 中 DF1 的 column_2 与 DF2 的 column_1 匹配的任何和所有行。 Excel 速度慢得离谱,我想不再使用 excel 来处理大型数据框。

感谢任何帮助或提供帮助的指示。我真的无法弄清楚我的代码是否确实删除了重复项和/或是否有另一种我可以确信不会这样做的解决方案。

【问题讨论】:

  • 在我看来是正确的...你能举一个你没有得到预期结果的例子吗?
  • 感谢您说上面的代码看起来正确。除了下面建议的代码之外,这迫使我再次检查 excel 文档,我发现这个特定的 excel 文件实际上存在错误,只有这个文件(我在其他地方没有遇到同样的问题) .你是对的,我认为代码是好的。

标签: python pandas dataframe


【解决方案1】:

np.where试试这个:

import numpy as np
list_df2 = df2['column1'].unique().tolist()
df1['matching_rows'] = np.where(df1['column2'].isin(list_df2),'Match','No Match')

然后使用匹配项创建一个新的数据框:

matched_df = df1[df1['matching_rows']=='Match']

【讨论】:

  • 谢谢!我执行了这些步骤,得到了与以前相同的结果,这也与我在 python 中尝试的另一种技术的结果相匹配。毕竟问题实际上是 excel,我对使用 python 删除行的担忧已大大减少!非常感谢您的帮助。
  • 不客气。如果这解决了您的问题,请接受答案以便将其关闭。
  • 呵呵,我认为您需要单击答案旁边的“打勾”,而不是写“已解决”:) 谢谢。
  • 收到,接受并感谢您的提醒/指导。
  • 哈哈你看到了!是的,我正在为我的第一篇文章而苦苦挣扎,看起来哈哈
猜你喜欢
  • 1970-01-01
  • 2018-04-04
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-19
相关资源
最近更新 更多