如何在 Pandas DataFrame Column/Series 中转发 propagate/fill 特定值?
How to forward propagate/fill a specific value in a Pandas DataFrame Column/Series?
我在数据框中有一个布尔列,如下所示:
True
False
False
False
False
True
False
False
False
我想转发propagate/fill真值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
你可以有 2 次:
s = s | s.shift(1) | s.shift(2)
您可以从那里概括为 n-times。
试试 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
您仍然可以使用 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
我在数据框中有一个布尔列,如下所示:
True
False
False
False
False
True
False
False
False
我想转发propagate/fill真值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
你可以有 2 次:
s = s | s.shift(1) | s.shift(2)
您可以从那里概括为 n-times。
试试 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
您仍然可以使用 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