last_valid_index()
仅适用于整个数据框并且rolling()
不允许last_valid_index()
。有没有办法找到窗口中布尔值列中的最后一个有效索引?
例如:
d = {'col': [True, False, True, True, False, False]}
df = pd.DataFrame(data=d)
滚动窗口 3 的预期结果是:
0 NaN
1 NaN
2 2.0
3 3.0
4 3.0
5 3.0
正如我在评论中提到的here,我认为当前接受的解决方案有一个错误。这篇文章开头的大部分内容都是逐字逐句摘自我的评论的。
将示例更改为
d = {'col': [True, False, True, True, False, False, False]}
df = pd.DataFrame(data=d)
那么最后3个条目组成了3的整个滚动窗口,并且都是False。但是当前接受的解决方案返回最后一个条目的索引 3,即使我假设它应该是 NaN(否则除了将前 2 个观察值设置为 NaN 之外,滚动窗口还有什么意义?)。
这是我提出的修复方案:
df['new'] = df.index
df['new'] = df['new'].where(df['col'], -1).rolling(3).max().replace(-1, np.nan)
它所做的不是替换其中的值df['col']
对于 NaN 为 False,然后使用ffill()
要将这些索引替换为以前的索引,请将这些索引替换为 -1。那么最后,如果一个窗口中的所有索引的值为-1,则意味着整个窗口有df['col']
为 False,因此该索引被替换为np.nan
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)