Pandas dataframe, если условие not на основе предыдущих строк не работает - python
0
Есть ли способ сделать приведенный ниже код более эффективным.
for i in range(0, len(df)):
current_row = df.iloc[i]
if i > 0:
previous_row =df.iloc[i-1]
else:
previous_row = current_row
if (current_row[A] != 1):
if ((current_row[C] < 55) and (current_row[D] >= -1)):
df.loc[i,F] = previous_row[F] + 1
else:
df.loc[i,F] = previous_row[F]
Например, если кадр данных подобен приведенному ниже:
df = pd.DataFrame({A:[1,1,1, 0, 0, 0, 1, 0, 0], C:[1,1,1, 0, 0, 0, 1, 1, 1], D:[1,1,1, 0, 0, 0, 1, 1, 1],
F:[1,1,1, 0, 0, 0, 1, 1, 1]})
Мой вывод должен выглядеть следующим образом
>>> df
A C D F
0 1 1 1 1
1 1 1 1 1
2 1 1 1 1
3 0 0 0 2
4 0 0 0 3
5 0 0 0 4
6 1 1 1 1
7 0 1 1 2
8 0 1 1 3
Таким образом, в основном, если условия выполняются, я хочу, чтобы значение F было изменено как предыдущая строка F +1.
Я также попробовал приведенный ниже код, но он не работает.
df[prev] = df.F.shift()
def shift(row):
row[F] = np.where((row[A] != 1) & ((row[C]<55) & (row[D]>=-1)), row[prev] + 1, row[prev])
return row[F]
df[F] = df.apply(shift, axis=1)
Источник
- 381
- 1
- 11 май 2020 2020-05-11 10:17:52
- Shanoo
1 ответ
0
Создайте новый столбец F_previous
, используя df.F.shift(1)
, чтобы вы получили значения со сдвигом 1 как новый столбец. Теперь напишите функцию, используя этот столбец и другие столбцы, чтобы вернуть новое значение F
, и используйте метод apply
, чтобы получить новые значения для столбца F
.
- 11 май 2020 2020-05-11 10:17:53
- Uday