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

我需要用另一个数据帧的相互日期索引替换一个数据帧中的值。这里有特定的日期(第 5 天到第 10 天),其中 B 列的值需要替换为 dataframe2 中的值。我看过合并/加入/替换/等,但不知道如何做到这一点。


import pandas as pd

import numpy as np


list1 = [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    B

Date                

2016-01-01   10    4

2016-01-02   80    3

2016-01-03    6   22

2016-01-04   38    6

2016-01-05   41   NA

2016-01-06   54   NA

2016-01-07   12   NA

2016-01-08  280   NA

2016-01-09   46   NA

2016-01-10   21   NA

2016-01-11   46  452

2016-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)


             B

Date          

2016-01-05  78

2016-01-06  15

2016-01-07  16

2016-01-08  79

2016-01-09  71

2016-01-10  90

最终输出应如下所示:


              A    B

Date                

2016-01-01   10    4

2016-01-02   80    3

2016-01-03    6   22

2016-01-04   38    6

2016-01-05   41   78

2016-01-06   54   15

2016-01-07   12   16

2016-01-08  280   79

2016-01-09   46   71

2016-01-10   21   90

2016-01-11   46  452

2016-01-12   22   13

任何帮助将不胜感激!谢谢你。


繁星coding
浏览 173回答 2
2回答

忽然笑

一种使用方式 combine_firstdf1 = dat2.combine_first(dat)print (df1)            A    BDate        2016-01-01  10  4.02016-01-02  80  3.02016-01-03  6   22.02016-01-04  38  6.02016-01-05  41  78.02016-01-06  54  15.02016-01-07  12  16.02016-01-08  280 79.02016-01-09  46  71.02016-01-10  21  90.02016-01-11  46  452.02016-01-12  22  13.0或使用 DataFrame.updatedat.update(dat2)或者你也可以使用 .locdat.loc[dat2.index, 'B'] = dat2.loc[:, 'B'] 
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python