当一列不为null时,python pandas匹配两列之间的值

问题描述

在这里找不到类似的问题。

请在下面找到表格:

         A       B       C      D
  0     pen     nan     dfds    1238
  1     Apple   pen     fsd      324
  2     Peach   nan     kd       878
  3     grape   peach   jil      9kj
  4     laptop  nan     lks      873p
  5     light   grape   kje      7623d
  6     nan     grape   3r43     kj23
  7     nan     grape   3fdf     8734d
  1. 如果列B不为空,则将B中的值与A中的值进行比较,并尝试查找匹配的值。例如A列第一行中的“ pen” = B列第二行中的“ pen”。
  2. 如果识别出匹配的值,则需要在A列中找到索引。 “ pen”是一个匹配值,A列中“ pen”的索引为0。

我的预期输出是:

         A       B        C      D 
  0     pen     nan     dfds    1238
  2     Peach   nan     kd       878
  3     grape   peach   jil      9kj

并保留原始索引号,如输出示例所示

我知道如何完成A和B之间的匹配工作。我的代码

df2=df[df[['A','B']].nunique(axis=1)==1]

但是当B列不为null时,我不知道如何添加条件。而且我不想做循环迭代,因为数据集非常大。

非常感谢!

解决方法

我认为,在问题的第一点,您是说“ C ”列不为空吗?但是无论如何,我都会在列“ B ”中进行演示。

为此,您必须创建一个仅包含非空值的新数据框。

df_not_null = df.dropna(subset=['B'])

然后,您可以比较任何您想比较的东西。

df2 = df_not_null[df_not_null[['A','B']].nunique(axis=1)==1]