Значения панд неттинга по строкам и столбцам - PullRequest
0 голосов
/ 10 октября 2018

У меня есть следующий фрейм данных:

Col1    Col2    H1  H2  H3
A       up      19  19  10
A       down        6   11
B       up          13  17
B       down    15  13  11
C       up      13  15  16

Я хочу получить следующее:

Col1    Col2    H1  H2  H3
A       up      19  13  
A       down            1
B       up              6
B       down    15      
C       up      13  15  16

Где для каждого Col1, H1, H2, H3 type Col2 значения былинетто для up и down.

Например, для

A       up      19  19  10
A       down        6   11

Нетто

A       up      19  13  
A       down            1

Получено 19-0, 19-6, 11-10

Количество строк и столбцов очень велико, поэтому я стараюсь не кодировать их значения жестко и не зацикливать его.Есть ли у панды способы сделать это?

1 Ответ

0 голосов
/ 10 октября 2018

Вы можете попытаться взять разницу для каждого сгруппированного столбца и изменить последовательность, если в столбце есть какое-либо отрицательное значение

df.groupby('Col1')['H1','H2','H3'].apply(lambda x:x.diff().fillna(0).transform(lambda x: list(reversed(x.tolist())) if any(x<0) else x) if len(x)>1 else x).abs()

Out:

    H1        H2    H3
0   19.0    13.0     0.0
1   0.0      0.0     1.0
2   0.0      0.0     6.0
3   15.0     0.0     0.0
4   13.0    15.0    16.0

Я пытался использоватьПеревернуть список панд без обратной функции, я не знаю, почему это не сработало.

df.groupby('Col1')['H1','H2','H3'].apply(lambda x:x.diff().fillna(0).transform(lambda x: x[::-1] if any(x<0) else x) if len(x)>1 else x).abs()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...