簡體   English   中英

熊貓用值填充長度零

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM