![](/img/trans.png)
[英]Fill values from one dataframe into another dataframe based on index of the two
[英]Fill values in another dataframe based on data from first one
我有這樣的數據框:
ID 2018-01 2018-02 2018-03 2018-04
A1 8500 8500 8500 8500
A2 NA 1900 1900 1900
A3 NA NA NA 3000
A4 NA NA NA 0
現在我有其他數據框,我想用它來填充 NA 值
ID Date Due
A1 2018-01 8500
A2 2018-01 9000
A3 2018-02 4000
A4 2018-01 1000
現在從這個數據幀(月)中的日期到第一個數據幀中不是 na 的下一個值,我想用Due
列中的值填充: 所以結果是這樣的:
ID 2018-01 2018-02 2018-03 2018-04
A1 8500 8500 8500 8500
A2 9000 1900 1900 1900
A3 NA 4000 4000 3000
A4 1000 1000 1000 0
我怎么能那樣做?
編輯:有一種情況,行中根本沒有預填充值
ID 2018-01 2018-02 2018-03 2018-04
A1 8500 8500 8500 8500
A2 NA 1900 1900 1900
A3 NA NA NA 3000
A4 NA NA NA 0
A5 NA NA NA NA
ID Date Due
A1 2018-01 8500
A2 2018-01 9000
A3 2018-02 4000
A4 2018-01 1000
A5 2018-03 1500
在這種情況下,是否可以只根據日期將相應的值放入列中而不完全填寫?
所以結果:
ID 2018-01 2018-02 2018-03 2018-04
A1 8500 8500 8500 8500
A2 9000 1900 1900 1900
A3 NA 4000 4000 3000
A4 1000 1000 1000 0
A5 NA NA 1500 NA
如果ID
是df1
中的列,則使用DataFrame.pivot
,然后向前填充缺失值,最后用DataFrame.fillna
或DataFrame.combine_first
替換缺失值:
df = df1.set_index('ID').fillna(df2.pivot('ID','Date','Due').ffill(axis=1))
print (df)
2018-01 2018-02 2018-03 2018-04
ID
A1 8500.0 8500.0 8500.0 8500.0
A2 9000.0 1900.0 1900.0 1900.0
A3 NaN 4000.0 4000.0 3000.0
A4 1000.0 1000.0 1000.0 0.0
A5 NaN NaN 1500.0 NaN
使用pd.crosstab
和DataFrame.update
:
由於您想從另一個數據幀中的一個數據幀更新NaN
值,我們可以為此使用DataFrame.update
,但首先我們設置右軸,因為此方法與這些值對齊:
df1 = df1.set_index('ID')
df1.update(pd.crosstab(df2['ID'], df2['Date'], df2['Due'], aggfunc='sum'))
df1 = df1.ffill(axis=1)
2018-01 2018-02 2018-03 2018-04
ID
A1 8500.0 8500.0 8500.0 8500.0
A2 9000.0 1900.0 1900.0 1900.0
A3 NaN 4000.0 4000.0 3000.0
A4 1000.0 1000.0 1000.0 0.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.