Python 在pandas中的某一行之前设置行,而不进行迭代

Python 在pandas中的某一行之前设置行,而不进行迭代,python,pandas,dataframe,vectorization,Python,Pandas,Dataframe,Vectorization,我在pandas数据帧中有一列,我想将“大”之前的任何不间断的“正常”序列更改为“大”。我不想将列中“正常”的所有实例替换为“大”。例如,我想将左列更改为下面的右列: 输入 结果 小的 小的 小的 小的 正常 大型 正常 大型 大的 大的 小的 小的 正常 正常 小的 小的 正常 大型 大的 大的 这里有一种使用bfill的方法 样本输出: >>> input_frame = input_frame.replace({'normal': None}) >>>

我在pandas数据帧中有一列,我想将“大”之前的任何不间断的“正常”序列更改为“大”。我不想将列中“正常”的所有实例替换为“大”。例如,我想将左列更改为下面的右列:

输入 结果 小的 小的 小的 小的 正常 大型 正常 大型 大的 大的 小的 小的 正常 正常 小的 小的 正常 大型 大的 大的
这里有一种使用bfill的方法

样本输出:

>>> input_frame = input_frame.replace({'normal': None})
>>> input_frame['bfilled'] = input_frame[0].bfill()
>>> input_frame
       0 bfilled
0  small   small
1  small   small
2   None   large
3   None   large
4  large   large
5  small   small
6   None   small  <--- This should be changed
7  small   small
8   None   large
9  large   large
>>> # Select the row(s) that need to be changed with
>>> input_frame.loc[(input_frame['bfilled'] != 'large') & input_frame[0].isna()]
      0 bfilled
6  None   small
>>input\u frame=input\u frame.replace({'normal':None})
>>>输入帧['bfilled']=输入帧[0]。bfill()
>>>输入帧
0 bfilled
0小
1小
2无大
3无大
4大号
5小
6非小>>#选择需要更改的行
>>>input_frame.loc[(input_frame['bfilled']!='large')&input_frame[0].isna()]
0 bfilled
6不小

尝试使用
b填充
where

df1.loc[df1['input'].eq("normal")]  = np.nan
df1['result'] = df1.fillna(method='bfill').where(df1.notnull() | (df1.shift(-1) != 'small')).fillna('normal')

df1:

    input   result
0   small   small
1   small   small
2   NaN     large
3   NaN     large
4   large   large
5   small   small
6   NaN     normal
7   small   small
8   NaN     large
9   large   large

避免使用
itterrows
。太慢了。
    input   result
0   small   small
1   small   small
2   NaN     large
3   NaN     large
4   large   large
5   small   small
6   NaN     normal
7   small   small
8   NaN     large
9   large   large