Pandas проблема с данными. Создать столбец, в котором ячейка строки получает значение другой ячейки строки - PullRequest
2 голосов
/ 27 марта 2020

У меня есть pandas датафрейм. Сортируется по столбцу «h». Я хочу добавить два новых столбца, в которых: элементы каждой зоны будут иметь максимальную границу и минимальную границу. (Они будут одинаковыми для каждого элемента в зоне). Максимальная граница будет минимальным значением «h» предыдущей зоны, а минимальная граница будет максимальным значением «h» следующей зоны

name    h   w   set row zone
ZZON5   40  36  A   0   0
DWOPN   38  44  A   1   0
5SWYZ   37  22  B   2   0
TFQEP   32  55  B   3   0
OQ33H   26  41  A   4   1
FTJVQ   24  25  B   5   1
F1RK2   20  15  B   6   1
266LT   18  19  A   7   1
HSJ3X   16  24  A   8   2
L754O   12  86  B   9   2
LWHDX   11  68  A   10  2
ZKB2F   9   47  A   11  2
5KJ5L   7   72  B   12  3
CZ7ET   6   23  B   13  3
SDZ1B   2   10  A   14  3
5KWRU   1   59  B   15  3

на что я надеюсь:

name    h   w   set row zone maxB minB
ZZON5   40  36  A   0   0         26
DWOPN   38  44  A   1   0         26
5SWYZ   37  22  B   2   0         26
TFQEP   32  55  B   3   0         26
OQ33H   26  41  A   4   1    32   16
FTJVQ   24  25  B   5   1    32   16
F1RK2   20  15  B   6   1    32   16
266LT   18  19  A   7   1    32   16
HSJ3X   16  24  A   8   2    18   7
L754O   12  86  B   9   2    18   7
LWHDX   11  68  A   10  2    18   7
ZKB2F   9   47  A   11  2    18   7
5KJ5L   7   72  B   12  3    9  
CZ7ET   6   23  B   13  3    9
SDZ1B   2   10  A   14  3    9
5KWRU   1   59  B   15  3    9  

Есть идеи?

1 Ответ

2 голосов
/ 27 марта 2020

Сначала сгруппируйте зоны и найдите минимальные и максимальные из них

min_max_zone = df.groupby('zone').agg(min=('h', 'min'), max=('h', 'max'))

Теперь вы можете использовать apply:

df['maxB'] = df['zone'].apply(lambda x: min_max_zone.loc[x-1, 'min'] 
                               if x-1 in min_max_zone.index else np.nan)

df['minB'] = df['zone'].apply(lambda x: min_max_zone.loc[x+1, 'max']             
                               if x+1 in min_max_zone.index else np.nan)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...