我需要用另一个数据帧的相互日期索引替换一个数据帧中的值。这里有特定的日期(第 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']
添加回答
举报
0/150
提交
取消