[英]Pandas fill zeros of lenght with values
我有一個df,例如
import pandas as pd
col = 'one'
d = {col : pd.Series([1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1])}
df = pd.DataFrame(d)
df
df = 1,1,1,1,0,1,1,0,0,1,1
現在,我想將長度為x(此處x = 1)的所有連續值替換為值v(此處v = 1)。 這樣我的新df看起來像這樣
1,1,1,1,<1>,1,1,0,0,1,1
代替
1,1,1,1,<0>,1,1,0,0,1,1
到目前為止,我的建議是建立連續的小組
def build_consecutive_groups(df: pd.DataFrame, col, newcol_appendix='_same'):
df[col + newcol_appendix] = (df[col] != df[col].shift()).cumsum()
return df.groupby(col + newcol_appendix, as_index=False)
有另一列“ one_same”
1,1,1,1,2,3,3,4,4,5,5
這給了我亞組。 現在,我可以使用子組的apply來獲取形狀,並檢查shape [0]為1且值為0的位置,以標識要替換為1的單元格。然后創建一個標識這些值的索引系列,並進行設置最后一步是將它們移至1。
但這看起來非常復雜,我認為必須有更好的方法,例如使用滾動功能。
您可以先使用diff
然后cumsum
,然后使用groupby
+ transform
對組進行替換以替換值
x=1
s=df.one.diff().ne(0).cumsum()
df.loc[s.groupby(s).transform('count')==x,'one']='v'
df
Out[193]:
one
0 1
1 1
2 1
3 1
4 v
5 1
6 1
7 0
8 0
9 1
10 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.