簡體   English   中英

根據第一個數據框中的數據填充另一個數據框中的值

[英]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

如果IDdf1中的列,則使用DataFrame.pivot ,然后向前填充缺失值,最后用DataFrame.fillnaDataFrame.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.crosstabDataFrame.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM