【问题标题】:Conditional replacement across data frames using Pandas使用 Pandas 跨数据帧的条件替换
【发布时间】:2020-12-08 19:08:59
【问题描述】:

我对 Python 比较陌生,并且有一个关于跨数据框的条件替换的问题。

我有两个数据框,A 和 B,只要有匹配的 id (nid),我想用 B 中的日期更新 A 中的日期。

import pandas as pd
import numpy as np

nid1 = (1, 3, 4, 8)
date1 = ("2010-02-01", "2008-06-05", "2011-03-15", "2009-02-17") 
info1 = ("b", "m", "d", "m")

nid2 = (1, 3)
date2 = ("2010-08-01", "2008-01-01") 
    
dfa = pd.DataFrame(list(zip(nid1, date1, info1)),  columns =['nid', 'date', 'info']) 
dfb = pd.DataFrame(list(zip(nid2, date2)),  columns =['nid', 'date'])

只要有匹配的 id,我想将 dfa 中的日期变量更新为 dfb 中的数据变量。

我没有运气尝试将 A 转换为字典来替换

dict_b = dfb.set_index('nid').to_dict()['date']
dfa["date"].replace(dict_b, inplace=True)

或者使用 np.where

np.where(dfa["nid"].isin(dfb["nid"]), dfb["date"], dfa["date"])

谁能给我一个提示?

【问题讨论】:

    标签: python pandas dataframe replace conditional-statements


    【解决方案1】:

    你可以使用combine_first:

    print (dfb.set_index("nid").combine_first(dfa.set_index("nid")))
    
               date info
    nid                 
    1    2010-08-01    b
    3    2008-01-01    m
    4    2011-03-15    d
    8    2009-02-17    m
    

    【讨论】:

      猜你喜欢
      • 2019-01-07
      • 1970-01-01
      • 2019-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-09
      • 2016-04-29
      相关资源
      最近更新 更多