簡體   English   中英

將 Pandas Dataframe 中的行按索引替換為另一個 Dataframe 中具有相應索引的值

[英]Replace rows by index in a Pandas Dataframe with values with corresponding index in another Dataframe

我正在嘗試編寫一個 function,給定許多用戶指定的時間步長輸入,它將用另一個 dataframe 的值覆蓋給定索引處的值。 例如:

df1

index   date  skew
92  2019-09-02  0
93  2019-09-03  0
94  2019-09-04  0
95  2019-09-05  0
96  2019-09-06  0
97  2019-09-09  0

df2

index  change
13      0.63
14      0.61
15      0.98
16      0.11
17      0.43

我追求的結果:

result_df

index   date         skew
92  2019-09-02  0
93  2019-09-03  0.63
94  2019-09-04  0.61
95  2019-09-05  0.98
96  2019-09-06  0.11
97  2019-09-09  0.43

使用 for 循環和df1.at[-i, 'skew'] = df2.loc[-i, 'change']

我得到以下結果:

index   date   skew
92  2019-09-02  0
93  2019-09-03  0
94  2019-09-04  0
95  2019-09-05  0
96  2019-09-06  0
97  2019-09-09  0
-5  NaT 0.63
-4  NaT 0.61
-3  NaT 0.98
-2  NaT 0.11
-1  NaT 0.43

我目前的 function:


    num_timesteps = 5

    def append_changes (df1, df2, num_timesteps):
      # Reverse loop to start from index df1.iloc[-num_timsteps:]
      for i in range(num_timesteps, 0, -1):
        df1.at[-i:, 'filler'] = df2.loc[-i:, 'change']
    return df1

我希望從索引-5(根據 num_timesteps)到 dataframe 末尾的傾斜列下的行值將替換為 df2 中同一索引處的“更改”列中的那些值。

我認為沒有必要循環,只使用DataFrame.iloc列的位置按Index.get_loc為 select 並設置新值 - 為避免匹配索引值分配.values數組創建的值:2。

num_timesteps = 5
def append_changes (df1, df2, num_timesteps):
    arr = df2.iloc[-num_timesteps:, df2.columns.get_loc('change')].values
    df1.iloc[-num_timesteps:, df1.columns.get_loc('skew')] = arr
    return df1
print (append_changes(df1, df2, num_timesteps))
             date  skew
index                  
92     2019-09-02  0.00
93     2019-09-03  0.63
94     2019-09-04  0.61
95     2019-09-05  0.98
96     2019-09-06  0.11
97     2019-09-09  0.43

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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