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