【问题标题】:Pandas fill empty values on one dataframe from another dataframe熊猫从另一个数据帧填充一个数据帧上的空值
【发布时间】:2021-12-02 08:39:57
【问题描述】:

这是我可以使用 XLOOKUP 函数在 Excel 中轻松复制的内容,但我正在尝试使用 pandas 来完成。

我有 2 个数据框,这样说:

df1

|first_name | last_name | dob      | value |
| Goku      | Saiyan    | 1/1/2021 |       |
| Vegetta   |  Super    | 8/7/1990 |       |
| Gohan     |  Son      | 4/20/1969|       |

df2

|first_name | last_name | dob      | value |
| Goku      | Saiyan    | 1/1/2021 |   50  |
| Vegetta   |  Super    | 8/7/1990 |   92  |
| Gohan     |  Son      | 4/20/1969|   31  |
| Trunks    |  Donald   | 7/1/1921 |   49  |
| New Name  |  Another  | 1/31/1992|   67  |

我想用 df2 中的 value 列填充 df1 中的 value 列。

我不能使用combine_first,因为数据框有不同的索引和不同的大小。

如果我使用pd.merge,那么我会得到value_x 和value_y,其中value_y 有我想要的数据,但我需要做更多的处理才能将它放在我想要的df1['value'] 上

我基本上想匹配两个数据帧上的名字、姓氏和出生日期,并从 df2 接收value。

这可能是一个简单的问题,但我一直在努力使用我尝试过的不同方法,我认为我一定缺少一些东西,因为它不应该那么复杂。

任何帮助将不胜感激。

【问题讨论】:

  • 我认为您的 pd.merge 方法是最好的选择。您可以简单地从 df2 中删除不需要的列,进行合并(设置 copy=False),然后使用 pd.where 填充缺失值。您必须在最后删除额外的“价值”列,但这只是一列并不可怕。

标签: python pandas


【解决方案1】:

如果来自df1 的value 列不包含现有值,则可以删除它并使用merge:

>>> pd.merge(df1.drop(columns='value'), df2, how='left',
             on=['first_name', 'last_name', 'dob'])

  first_name last_name        dob  value
0       Goku    Saiyan   1/1/2021     50
1    Vegetta     Super   8/7/1990     92
2      Gohan       Son  4/20/1969     31

【讨论】:

    【解决方案2】:

    使用地图。

    创建一个 dicts_name 的字典;来自 df2 的值并映射到 df1 的 first_name。

    df1 =df1.assign(value=df1['first_name'].map(dict(zip(df2['first_name'],df2['value']))))
    
    
    
       first_name last_name        dob  value
    0       Goku    Saiyan   1/1/2021     50
    1    Vegetta     Super   8/7/1990     92
    2      Gohan       Son  4/20/1969     31
    

    【讨论】:

      猜你喜欢
      • 2018-08-18
      • 1970-01-01
      • 2021-07-02
      • 2022-01-24
      • 2021-12-25
      • 2018-07-15
      • 1970-01-01
      • 2022-10-23
      • 2021-03-02
      相关资源
      最近更新 更多