簡體   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