Сгруппированные по набору столбцов, первое ненулевое значение и один из всех нулей в столбце должны быть помечены как 1, а остальные как 0 - PullRequest
0 голосов
/ 19 апреля 2020
import pandas as pd
df = pd.DataFrame({'Org1': [1,1,1,1,2,2,2,2,3,3,3,4,4,4], 
                   'Org2': ['x','x','y','y','z','y','z','z','x','y','y','z','x','x'], 
                   'Org3': ['a','a','b','b','c','b','c','c','a','b','b','c','a','a'], 
                   'Value': [0,0,3,1,0,1,0,5,0,0,0,1,1,1]})
df

Для каждого уникального набора «Org1, Org2, Org3» и на основе «Значения»

  1. Первое ненулевое «значение» должно иметь «FLAG» = 1 и другие = 0

  2. Если все "значения" равны 0, тогда один из "FLAG" строки = 1 и другие = 0

  3. Если все «значения» в столбце NON ZERO, тогда первый экземпляр имеет FLAG = 1 и другие 0

Я использовал решения, представленные в Пометить первый ненулевой столбец значение с 1 и остальные 0 с несколькими столбцами

Одна разница в вышеупомянутой точке 2 не рассматривается

"Если все" значения "равны 0, тогда один из" FLAG "строки = 1 и другие = 0 "

1 Ответ

0 голосов
/ 19 апреля 2020

Вы можете изменить связанное решение с помощью remove .where:

m = df['Value'].ne(0)
idx = m.groupby([df['Org1'],df['Org2'],df['Org3']]).idxmax()
df['FLAG'] = df.index.isin(idx).astype(int)
print (df)
    Org1 Org2 Org3  Value  FLAG
0      1    x    a      0     1
1      1    x    a      0     0
2      1    y    b      3     1
3      1    y    b      1     0
4      2    z    c      0     0
5      2    y    b      1     1
6      2    z    c      0     0
7      2    z    c      5     1
8      3    x    a      0     1
9      3    y    b      0     1
10     3    y    b      0     0
11     4    z    c      1     1
12     4    x    a      1     1
13     4    x    a      1     0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...