python - 根据条件为整个组分配价值
问题描述
我对这一切都很陌生,所以提前抱歉:
我有一个看起来像这样的数据框:
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)。
关于实现我想要的任何建议?
解决方案
使用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
推荐阅读
- c# - 如何处理数据合约序列化和应用程序混淆
- java - 是否可以动态更改 Switch 小部件的 ON 颜色?
- c# - 我在 C# 中有一个 for 循环我只想运行一次
- android - 带有新 sha1 的 Android Firebase 推送通知
- css - @font-face 图标未在 IE 11 中显示,所有其他浏览器都支持。使用 base64 网址
- c - 在结构中重新分配内存后出现奇怪的文本
- regex - 如何选择包括第三个斜杠(RegExp)在内的所有内容?
- jquery - POST 方法不断收到“404 Not found”错误
- php - 我可以使用哪些机制将结果集传输到另一个视图页面?
- javascript - 如何使用jquery动态更改用wordpress制作的网站中div的背景?