亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

按日期索引替換兩個數據幀中的值 - 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 關注
  • 198 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號