我有一个pandas数据框,每个月我在其中将股票价值分类为分位数。我想创建一列来显示股票所处的最后一个不同的分位数。
例如:如果股票从分位数1到分位数3,则“最后一个不同的值”列值将 在此期间为“ 1”。如果之后转到分位数6,则“最后一个不同的值”列 在此期间将显示“ 3”,因为3是最后的分位数而不是6。
为避免潜在的误解,您可能会想我可以从上个月的分位数中减去当前月份的分位数或显示一个1周期的滞后值,但这在更改分位数后的3个周期内不起作用,因为我仍然会寻找最后一个“不同”的分位数。
所以我想知道如何获取一列的最后一个不同的值作为另一列的值。
输出应类似于以下内容,其中“ Last_Diff_Value”卷显示“分位数”列的最新值,该值不等于当前期间的“分位数”列的值。例外情况是,分位数值除1以外没有其他值时,“ Last_Diff_Value”取值为1。在这种情况下,也可以为0或不适用
+---------+----+
| GroupId | Id |
+---------+----+
| 1 | 1 |
| 1 | 2 |
| 1 | 5 |
| 1 | 6 |
| 2 | 3 |
| 2 | 4 |
| 2 | 5 |
| 2 | 6 |
+---------+----+
答案 0 :(得分:1)
找到diff
不为零的地方,掩盖其余部分并向前填充。
df.assign(
Last_Diff_Value=
df.Quartile.shift().where(df.Quartile.diff().ne(0)).ffill().bfill(downcast='infer')
)
Date Quartile Last_Diff_Value
0 01-2018 1 1
1 02-2018 1 1
2 03-2018 2 1
3 04-2018 2 1
4 05-2018 5 2
5 06-2018 6 5