首页 > 解决方案 > 如何使用来自第二个数据帧的值填充新列,但依赖于当前数据帧中不同的现有列使用 Pandas

问题描述

我创建了一个信息表,它很长(想想将近 100 次观察或不到)。我有一个主表(大约 70K 保留),我需要在其中创建一个新列并根据我的两个数据框之间的匹配值填充它,但我需要用我的信息表中的数据填充单元格的新列。

我创建了一个小数据集,但我的真实数据集(我无法分享,因为我的教授签署了保密协议)有 70K 的观察结果。

data_1(信息表)

 Animal          Food
  Dog            Stake
  Cat            Fish
  Rabbit         Carrot

数据2(原表)

 Name     Animal     Age
 Binxy    Dog         1
 Al       Rabbit      4
 Sam      Dog         11
 Dexter   Cat         9
 Dory     Hamster     6
 Chloe    Cat         5

所需的数据帧

 Name     Animal     Age    Fed [new column]
 Binxy    Dog         1     Stake
 Al       Rabbit      4     Carrot
 Sam      Dog         11    Stake
 Dexter   Cat         9     Fish
 Dory     Hamster     6     NaN
 Chloe    Cat         5     Fish

我的直觉告诉我,这可能与ilocloc使用一些布隆值有关。口头上我会说:

  1. 如果 data_2["Animal"] == data_2["Animal"]
  2. 然后用在 data_1["Food"] 中找到的相应食物填充新列 data_2["Fed"]

我认为merge可能有效,但我不确定它是否会为每个匹配值填充它。我不太擅长合并,因为我很难理解连接功能,但我认为不会在我需要的地方插入值,因为我的数据框长度不同。

编辑:我以前没有手动,但我只填写了两个或三个值,我不想手动为 100 执行此操作。但这是我的基本理解。

 New_Categorized_Full.loc[
      (New_Categorized["Produce"] == "Apple"), "Fruit"] = "Fuji"

标签: pythonpandasdataframe

解决方案


利用series.map

df2['Fed'] = df2.Animal.map(dict(df1[['Animal','Food']].to_numpy()))


Out[10]:
     Name   Animal  Age     Fed
0   Binxy      Dog    1   Stake
1      Al   Rabbit    4  Carrot
2     Sam      Dog   11   Stake
3  Dexter      Cat    9    Fish
4    Dory  Hamster    6     NaN
5   Chloe      Cat    5    Fish

推荐阅读