Я предполагаю, что подобные вопросы существуют, но не смогли их найти.У меня установлена Pandas 0.19.2.У меня большой массив данных, и для каждого значения строки я хочу перенести значение предыдущей строки для одного и того же столбца на основе некоторого логического условия.
Ниже приведено решение для перебора с двойным циклом грубой силы для небольшого примера.,Каков наиболее эффективный способ реализовать это?Можно ли решить это в векторизации?
import pandas as pd
import numpy as np
np.random.seed(10)
df = pd.DataFrame(np.random.uniform(low=-0.2, high=0.2, size=(10,2) ))
print(df)
for col in df.columns:
prev = None
for i,r in df.iterrows():
if prev is not None:
if (df[col].loc[i]<= prev*1.5) and (df[col].loc[i]>= prev*0.5):
df[col].loc[i] = prev
prev = df[col].loc[i]
print(df)
Вывод:
0 1
0 0.108528 -0.191699
1 0.053459 0.099522
2 -0.000597 -0.110081
3 -0.120775 0.104212
4 -0.132356 -0.164664
5 0.074144 0.181357
6 -0.198421 0.004877
7 0.125048 0.045010
8 0.125048 -0.083250
9 0.125048 0.085830
РЕДАКТИРОВАТЬ: Обратите внимание, что одно значение может переноситься несколько раз,до тех пор, пока оно удовлетворяет логическому условию.