установить значение в нескольких строках в фрейме данных pandas на основе условия - PullRequest
0 голосов
/ 05 декабря 2018
   temperature  precipitation
0         1.26         0.0279
1         1.64         0.0330
2         1.98         0.0381
3         2.31         0.0406
4         2.61         0.0406
5         2.89         0.0381
6         3.15         0.0356
7         3.51         0.0305
8         3.78         0.0305
9         3.78         0.0305

В приведенном выше кадре данных я хочу создать новый столбец C, где значение равно 1 для 4 строк после того, как precipitation меньше 0,04, тогда как precipitation в этих 4 строках меньше 0,04.Я попытался использовать pd.where, но это только устанавливает значение для текущей строки.

Ожидаемый результат:

enter image description here

1 Ответ

0 голосов
/ 05 декабря 2018

IIUC, следующее;

Создайте столбец 'C' и заполните nan 's:

df['C'] = np.nan

количество последовательных вхождений' осадков '<0,04 в столбце' C_: </p>

def rolling_count(val):
    if val < 0.04:
        rolling_count.count +=1
    else:
        rolling_count.count = 0
    return rolling_count.count
rolling_count.count = 0

df['C_'] = df['precipitation'].apply(rolling_count)

заполните столбец 'C' '1', где первый '4' найден, а остальные заполните в обратном направлении 3:

df.loc[df[df['C_'] == 4].head(1).index.item(), 'C'] = 1
df['C'] = df['C'].fillna(method = 'bfill', limit = 3)
df['C'] = df['C'].fillna(0)
df['C'] = df['C'].astype(int)

df

   temperature  precipitation  C  C_
0         1.26         0.0279  0   1
1         1.64         0.0330  0   2
2         1.98         0.0381  0   3
3         2.31         0.0406  0   0
4         2.61         0.0406  0   0
5         2.89         0.0381  1   1
6         3.15         0.0356  1   2
7         3.51         0.0305  1   3
8         3.78         0.0305  1   4
9         3.78         0.0305  0   5

Примечание;этот результат отличается от того, что показывает ваш пример, но IIUC вам нужно найти 4 последовательных строки ниже 0,04 и заполнить «C».Проблема в том, что у вас есть значение «0.0406», заполненное «1» в «C», которое не ниже 0,04.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...