我在資料框中有一個布爾列,如下所示:
True
False
False
False
False
True
False
False
False
我想轉發/填充真值 n 次。例如2次:
True
True
True
False
False
True
True
True
False
對值ffill做了類似的事情NaN,但我找不到所描述的特定值的任何東西。執行此操作的最簡單方法是否只是執行標準回圈并僅遍歷行并使用計數器修改有問題的列?
每行是一個等距的時間序列條目
編輯:
當前的答案都使用 bool 列解決了我的特定問題,但可以修改一個答案以更通用:
>> s = pd.Series([1, 2, 3, 4, 5, 1, 2, 3])
0 1
1 2
2 3
3 4
4 5
5 1
6 2
7 3
>> condition_mask = s == 2
>> s.mask(~(condition_mask)).ffill(limit=2).fillna(s).astype(int)
0 1
1 2
2 2
3 2
4 5
5 1
6 2
7 2
uj5u.com熱心網友回復:
您仍然可以使用ffill,但首先您必須屏蔽這些False值
s.mask(~s).ffill(limit=2).fillna(s)
0 True
1 True
2 True
3 False
4 False
5 True
6 True
7 True
8 False
Name: 0, dtype: bool
uj5u.com熱心網友回復:
對于 2 次,您可以:
s = s | s.shift(1) | s.shift(2)
你可以從那里推廣到 n 次。
uj5u.com熱心網友回復:
嘗試rolling
n = 3
s.rolling(n, min_periods=1).max().astype(bool)
Out[147]:
0 True
1 True
2 True
3 False
4 False
5 True
6 True
7 True
8 False
Name: s, dtype: bool
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/458758.html
上一篇:如何在r中獲取列中的匹配項(即使它們不在同一行號中)?
下一篇:R中資料框內的部分分組
