【问题标题】:python pandas match values between two columns when one column is not null当一列不为空时,python pandas 匹配两列之间的值
【发布时间】:2020-09-04 01:26:29
【问题描述】:

在这里没有找到类似的问题。

请在下面找到表格:

         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 列第一行的“笔” = B 列第二行的“笔”。
  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 列不为空时,我不知道如何添加条件。而且我不想做循环迭代,因为数据集超级大。

非常感谢!

【问题讨论】:

    标签: python pandas null match string-matching


    【解决方案1】:

    我认为,在您问题的第 1 点中,您的意思是“C”列不为空吗?但无论如何,我将通过列“B”来演示它。

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

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

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

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

    【讨论】:

    • 抱歉我的错字。是的,当 B 列不为空时。问题是如果在 B 为 nan 时删除所有行,第一行也将被删除。但实际上它有一个匹配的值“pen”。
    • 你能再解释一下第1点吗?你想检查一下,如果 B 不为空,那么只有你的比较功能有效吗?或者您只是想比较忽略 B 是否为空的事实?
    • 是的,首先B不为空,其次,比较A和B,前提是B不为空。
    猜你喜欢
    • 2021-09-29
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多