繁体   English   中英

如何转发/填充 Pandas DataFrame 列/系列中的特定值?

[英]How to forward propagate/fill a specific value in a Pandas DataFrame Column/Series?

我在 dataframe 中有一个 boolean 列,如下所示:

True
False
False
False
False
True
False
False
False

我想转发/填充 True 值 n 次。 例如 2 次:

True
True
True
False
False
True
True
True
False

ffillNaN值做了类似的事情,但我找不到所描述的特定值的任何内容。 执行此操作的最简单方法是执行标准循环并遍历行并使用计数器修改相关列吗?

每行是一个等距离的时间序列条目

编辑:

当前的答案都用 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 次。

尝试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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM