Вставка строки в базу данных pandas на основе значения строки?

У меня есть DataFrame:

df = pd.DataFrame({'B':[2,1,2],'C':['a','b','a']}) BC 0 2 'a' 1 1 'b' 2 2 'a' 

Я хочу вставить строку выше любого вхождения «b», то есть дубликат этой строки, но с «b» изменен на «c», поэтому я получаю следующее:

  BC 0 2 'a' 1 1 'b' 1 1 'c' 2 2 'a' 

Для моей жизни я не могу понять, как это сделать.

    Вот один из способов сделать это:

     duplicates = df[df['C'] == 'b'].copy() duplicates['C'] = 'c' df.append(duplicates).sort_index() 

    Работа на уровне NumPy, это векторный подход –

     arr = df.values idx = np.flatnonzero(df.C=='b') newvals = arr[idx] newvals[:,df.columns.get_loc("C")] = 'c' out = np.insert(arr,idx+1,newvals,axis=0) df_index = np.insert(np.arange(arr.shape[0]),idx+1,idx,axis=0) df_out = pd.DataFrame(out,index=df_index) 

    Пример прогона –

     In [149]: df Out[149]: BC 0 2 a 1 1 b 2 2 d 3 4 d 4 3 b 5 8 a 6 4 a 7 2 b In [150]: df_out Out[150]: 0 1 0 2 a 1 1 b 1 1 c 2 2 d 3 4 d 4 3 b 4 3 c 5 8 a 6 4 a 7 2 b 7 2 c