Сгруппируйте данные и вычтите первое и последнее значение (или большее и меньшее значение) - PullRequest
2 голосов
/ 14 июля 2020

Я получил db:

   pat  exp   t  wt
0  abc    1  10   0
1  abc    1  20   0
2  abc    1  30   0
3  dfg    2  20   0
4  dfg    3  15   0
5  dfg    3  30   0
6  dfg    2  40   0
7  hij    4  25   0
8  hij    4  50   0

И я хочу изменить значение столбца «wt», вычитая первое и последнее значение «t» для каждого «pat» и «exp» , например, для «pat» = «dfg» и «exp» = 3 значение «wt» будет получено путем вычитания 30-15. Желаемый результат будет примерно таким:

   pat  exp   t   wt
0  abc    1  10   20
1  abc    1  20   20
2  abc    1  30   20
3  dfg    2  20   20
4  dfg    3  15   15
5  dfg    3  30   15
6  dfg    2  40   20
7  hij    4  25   25
8  hij    4  50   25

Это может быть то же самое, если вычесть большее и меньшее значение для «t» из каждого «pat» и «exp», если данные не упорядочены. Я пробовал с

for i in db["pat"]:
    for j in db["exp"]:
        db= db["t"].iloc[-1]-db["t"].iloc[0]

, но ничего не происходит и возвращается ошибка. Помогите пожалуйста!

1 Ответ

5 голосов
/ 14 июля 2020

Давайте попробуем numpy ptp с transform

df['wt']=df.groupby(['pat','exp']).t.transform(np.ptp)
df
   pat  exp   t  wt
0  abc    1  10  20
1  abc    1  20  20
2  abc    1  30  20
3  dfg    2  20  20
4  dfg    3  15  15
5  dfg    3  30  15
6  dfg    2  40  20
7  hij    4  25  25
8  hij    4  50  25
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...