我对这一切都很陌生,所以提前抱歉:
我有一个如下所示的数据框:
Issuance Issue Date Date Spread
1 1 12/31/2018 12/31/2018 3.42
2 1 12/31/2018 1/31/2019 3.45
3 1 12/31/2018 2/28/2019 3.49
4 1 12/31/2018 3/31/2019 3.52
5 1 12/31/2018 4/30/2019 3.56
6 1 12/31/2018 5/31/2019 3.59
7 2 3/31/2019 3/31/2019 3.52
8 2 3/31/2019 4/30/2019 3.56
9 2 3/31/2019 5/31/2019 3.59
我有一份发行和点差列表,我想制作一个新列'固定点差'在"发行日期"等于"日期"并保持所有日期的固定,如下:
Issuance Issue Date Date Spread Fixed Spread
1 1 12/31/2018 12/31/2018 3.42 3.42
2 1 12/31/2018 1/31/2019 3.45 3.42
3 1 12/31/2018 2/28/2019 3.49 3.42
4 1 12/31/2018 3/31/2019 3.52 3.42
5 1 12/31/2018 4/30/2019 3.56 3.42
6 1 12/31/2018 5/31/2019 3.59 3.42
7 2 3/31/2019 3/31/2019 3.52 3.52
8 2 3/31/2019 4/30/2019 3.56 3.52
9 2 3/31/2019 5/31/2019 3.59 3.52
我已经非常接近这个:
df['fixed_spread'] = df.loc[df['Issue Date'].idxmin(), 'spread']
这首先是我想要的,但它只关注整个数据帧的第一次发布(因此,对于上面df示例中的所有行,固定点差列将保持在3.42)。
有关实现我想要的任何建议吗?
答案 0 :(得分:0)
使用where
+ ffill
应该这样做。
df['Fixed Spread'] = df.Spread.where(df['Issue Date'] == df['Date']).ffill()
或者,
df['Fixed Spread'] = df.Spread.mask(df['Issue Date'] != df['Date']).ffill()
df
Issuance Issue Date Date Spread Fixed Spread
1 1 12/31/2018 12/31/2018 3.42 3.42
2 1 12/31/2018 1/31/2019 3.45 3.42
3 1 12/31/2018 2/28/2019 3.49 3.42
4 1 12/31/2018 3/31/2019 3.52 3.42
5 1 12/31/2018 4/30/2019 3.56 3.42
6 1 12/31/2018 5/31/2019 3.59 3.42
7 2 3/31/2019 3/31/2019 3.52 3.52
8 2 3/31/2019 4/30/2019 3.56 3.52
9 2 3/31/2019 5/31/2019 3.59 3.52
答案 1 :(得分:-1)
我只想创建一个临时数据框,其中只包含Issue Date等于Date的行,然后根据Issuance键将其与第一个数据帧连接起来。
tmp_df = df[df['Issue Date']==df['Date']][['Issuance','Spread']]
tmp_df.columns = ['Issuance','Fixed Spread']
df = pd.merge(df,tmp_df,how='left',on='Issuance')
可能不是最佳但它应该有用。