我正在try 比较来自两个不同数据帧的两列,并使用python返回所有可能的匹配:(在EXCEL中有点像xlookup,但有多个可能的匹配)

请参阅下面的详细信息以了解样本数据帧和我try 的工作.

下面是对数据集的解释:马克没有任何汽车,然而,在他的名字下列出了几辆车,我们知道这些车都不属于他.我正在try 查看DataFrame 1(Marks),并将其与包含所有其他车主及其汽车的更 Big Data 集进行比较:DataFrame 2(Claimed),并返回Mark汽车的可能车主,如下所示.

Dataframe 1 : Marks
Marks = pd.DataFrame({'Car Brand': ['Jeep','Jeep','BMW','Volvo'],'Owner Name': ['Mark', 
'Mark', 'Mark', 'Mark']})

    Car Brand   Owner Name
    0   Jeep    Mark
    1   Jeep    Mark
    2   BMW     Mark
    3   Volvo   Mark

数据帧2:已认领

数据帧2:已认领
claimed = pd.DataFrame({'Car Brand': ['Dodge', 'Jeep', 'BMW', 'Merc', 'Volvo', 'Jeep', 
'Volvo'], 'Owner Name': ['Chris', 'Frank','Rob','Kelly','John','Chris','Kelly']})

    Car Brand   Owner Name
   0    Dodge   Chris
   1    Jeep    Frank
   2    BMW     Rob
   3    Merc    Kelly
   4    Volvo   John
   5    Jeep    Chris
   6    Volvo   Kelly

然而,这些数据确实有重复的汽车品牌名称,车主名称是唯一的-这意味着即使凯利被提到两次,她也是同一个人.克里斯也是如此..等等

我希望我的Mark‘s DataFrame有一个新的列,如下所示:

Car Brand   Owner Name  Possible Owners
0   Jeep    Mark        [Frank, Chris]
1   Jeep    Mark        [Frank, Chris]
2   BMW     Mark        Rob
3   Volvo   Mark        [John, Kelly]

我已经try 了以下代码:

possible_owners = list()
for cars in Marks['Car Brand']:
  for car_brands in claimed['Car Brand']:
     if Marks.loc[Marks['Car Brand'].isin(claimed['Car Brand'])]:
        sub = list()
        sub.append()
        possible_owners.append(sub)
    else:
        not_found = 'No possible Owners Identified'
        possible_owners.append(not_found)
   #Then I will add possible_owners as a new column to Marks

   error code:ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), 
   a.item(), a.any() or a.all().

我也try 过合并,EXCEL xlookup,但(这有很多限制),我被困在试图理解如何返回可能的匹配,即使有多个,并将它们排在一行.

Question:如何比较这两个框架,从Owner Name列返回可能的值,并将这些值放入Marks表的新列中?

请原谅我的代码,我还是个新手.

推荐答案

您可以对声明的数据帧进行预处理,然后进行合并:

lookup = claimed.groupby('Car Brand').apply(lambda x: x['Owner Name'].to_list()).to_frame()
df_m = Marks.merge(lookup, on='Car Brand', how='left').rename(columns={0:'Possible Owners'})
print(df_m)

Result

  Car Brand Owner Name Possible Owners
0      Jeep       Mark  [Frank, Chris]
1      Jeep       Mark  [Frank, Chris]
2       BMW       Mark           [Rob]
3     Volvo       Mark   [John, Kelly]

Python相关问答推荐

Python 约束无法解决n皇后之谜

未删除映射表的行

为什么以这种方式调用pd.ExcelWriter会创建无效的文件格式或扩展名?

Django REST Framework:无法正确地将值注释到多对多模型,不断得到错误字段名称字段对模型无效'<><>

如何根据一列的值有条件地 Select 前N个组,然后按两列分组?

在Django admin中自动完成相关字段筛选

在嵌套span下的span中擦除信息

从Windows Python脚本在WSL上运行Linux应用程序

Python—压缩叶 map html作为邮箱附件并通过sendgrid发送

PYTHON、VLC、RTSP.屏幕截图不起作用

计算空值

如何在FastAPI中替换Pydantic的constr,以便在BaseModel之外使用?'

如何获得满足掩码条件的第一行的索引?

如何防止html代码出现在quarto gfm报告中的pandas表之上

将字节序列解码为Unicode字符串

如何在python tkinter中绑定键盘上的另一个回车?

使用pythonminidom过滤XML文件

如何在基于时间的数据帧中添加计算值

Antlr Python错误处理简单的PLSQL

try 第二次训练新的JAX+Equinox模型时,具有多个元素的数组的真值不明确(&Q)