我有一個 dfdf_actual看起來像這樣:
BondSecurity TradeCoupon IssuanceYear AsOfDate Cpr1
0 FNCL 4.0 2017 2022-06-30 17.888957
1 FNCL 4.0 2018 2022-04-30 26.383609
2 FNCL 4.0 2018 2022-05-31 20.834899
3 FNCL 4.0 2018 2022-06-30 17.707935
4 FNCL 4.0 2019 2022-04-30 28.453986
... ... ... ... ... ...
16230 G2SF 4.0 2017 2020-05-31 30.848600
16231 G2SF 4.0 2017 2020-06-30 38.159500
16232 G2SF 4.0 2018 2020-04-30 39.266900
16233 G2SF 4.0 2018 2020-05-31 40.343300
16234 G2SF 4.0 2018 2020-06-30 48.352200
我只想將Cpr1值向后移動一個月,而將其他行保留在原處。例如,對于第 1 行Cpr1,2022-04-30 的值將是20.834899因為那是 2022-05-31 的值。
我需要將這種轉變應用于 BondSecurity、TradeCoupon 和 IssuanceYear 資料框中的各個佇列。
uj5u.com熱心網友回復:
聚類方法:
df_actual['cohort'] = df_actual.BondSecurity ' ' df_actual.IssuanceYear.astype(str) ' ' df_actual.TradeCoupon.astype(str)
cohort_list = [df_actual[df_actual.cohort == x] for x in df_actual.cohort.unique()]
然后通過以下for回圈運行每個集群資料幀以生成集群級滯后Cpr1值
dfs_cpr_lagged = []
for df in cohort_list:
df1 = df.copy()
df1.index = df1.AsOfDate
df1.index = df1.index.to_period('M')
col_b_new = df1.groupby(level=0)['Cpr1'].first().shift(-1)
df1['Cpr_Lagged'] = col_b_new
dfs_cpr_lagged.append(dfs_cpr_lagged.append(df1.reset_index(drop = True)))
這是一個包含滯后 CPR 列的集群資料框串列。太棒了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/534485.html
