为了账号安全,请及时绑定邮箱和手机立即绑定

按日期索引替换两个数据帧中的值 - Python Pandas

按日期索引替换两个数据帧中的值 - Python Pandas

繁星coding 2021-07-18 17:18:47
我需要用另一个数据帧的相互日期索引替换一个数据帧中的值。这里有特定的日期(第 5 天到第 10 天),其中 B 列的值需要替换为 dataframe2 中的值。我看过合并/加入/替换/等,但不知道如何做到这一点。import pandas as pdimport numpy as nplist1 = [10,80,6,38,41,54,12,280,46,21,46,22]list2 = [4,3,22,6,'NA','NA','NA','NA','NA','NA',452,13]list3 = ['2016-01-01', '2016-01-02','2016-01-03','2016-01-04','2016-01-05','2016-01-06',         '2016-01-07','2016-01-08','2016-01-09','2016-01-10','2016-01-11','2016-01-12',]dat = pd.DataFrame({'A' : list1, 'B' : list2, 'Date' : list3}, columns = ['A', 'B', 'Date'])dat['Date'] = pd.to_datetime(dat['Date'], format = '%Y-%m-%d')dat = dat.set_index('Date')print(dat)值2016-01-05 to 2016-01-10需要替换为第二个数据框中的值:              A    BDate                2016-01-01   10    42016-01-02   80    32016-01-03    6   222016-01-04   38    62016-01-05   41   NA2016-01-06   54   NA2016-01-07   12   NA2016-01-08  280   NA2016-01-09   46   NA2016-01-10   21   NA2016-01-11   46  4522016-01-12   22   13这是第二个数据帧,这些值需要“映射”到第一个数据帧中:list4 = [78,15,16,79,71,90]list5 = ['2016-01-05','2016-01-06','2016-01-07','2016-01-08','2016-01-09','2016-01-10']dat2 = pd.DataFrame({'B' : list4, 'Date' : list5}, columns = ['B', 'Date'])dat2['Date'] = pd.to_datetime(dat2['Date'], format = '%Y-%m-%d')dat2 = dat2.set_index('Date')print(dat2)             BDate          2016-01-05  782016-01-06  152016-01-07  162016-01-08  792016-01-09  712016-01-10  90最终输出应如下所示:              A    BDate                2016-01-01   10    42016-01-02   80    32016-01-03    6   222016-01-04   38    62016-01-05   41   782016-01-06   54   152016-01-07   12   162016-01-08  280   792016-01-09   46   712016-01-10   21   902016-01-11   46  4522016-01-12   22   13任何帮助将不胜感激!谢谢你。
查看完整描述

2 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

一种使用方式 combine_first


df1 = dat2.combine_first(dat)


print (df1)


            A    B

Date        

2016-01-01  10  4.0

2016-01-02  80  3.0

2016-01-03  6   22.0

2016-01-04  38  6.0

2016-01-05  41  78.0

2016-01-06  54  15.0

2016-01-07  12  16.0

2016-01-08  280 79.0

2016-01-09  46  71.0

2016-01-10  21  90.0

2016-01-11  46  452.0

2016-01-12  22  13.0

或使用 DataFrame.update


dat.update(dat2)

或者你也可以使用 .loc


dat.loc[dat2.index, 'B'] = dat2.loc[:, 'B'] 


查看完整回答
反对 回复 2021-07-27
  • 2 回答
  • 0 关注
  • 170 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信