Как применить условия к линиям с одинаковым идентификатором - PullRequest
0 голосов
/ 23 марта 2020

У меня есть такой фрейм данных:

df= [ ID  child_ID  STATUS1  
      123  11        OK    
      123  22        KO 
      123  23        OK 
      124  56        OK  
      124  45        OK

Я хочу получить окончательный статус по ID, если один из childid - KO, это означает, что мой finalstatus - KO, поэтому я хочу такой фрейм данных:

f= [      ID  Child_ID  STATUS1  Statusfinal
          123  11           OK       KO
          123  22           KO       KO
          123  23           OK       KO
          124  56           OK       OK
          124  45           OK       OK 

как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

Я бы сначала вычислил дополнительный логический столбец, а затем использовал бы групповое агрегирование:

resul = df.assign(FinalStatus = ((df['STATUS1'].str.lower() == 'ok') &
                  (df['STATUS2'].str.lower() == 'ok'))
          ).groupby('ID').agg({'STATUS1': 'first',
                   'STATUS2': 'first',
                   'FinalStatus': all}).reset_index()

Добавьте правильные метки в последний столбец, и все:

resul['FinalStatus'] = np.where(resul['FinalStatus'], 'OK', 'KO')

дает:

   ID STATUS1 STATUS2 FinalStatus
0  12      OK      OK          KO
1  13      OK      OK          OK
0 голосов
/ 23 марта 2020

ОБНОВЛЕНИЕ:

IIU C вот одно решение,

df.set_index("ID", inplace=True)

def func(x):
    if any(x["STATUS1"].str.lower() == "ko") or any(x["STATUS2"].str.lower() == "ko"):
        return pd.Series(["OK", "OK", "KO"], index=["STATUS1", "STATUS2", "FINAL STATUS"])
    else:
        return pd.Series(["OK", "OK", "OK"], index=["STATUS1", "STATUS2", "FINAL STATUS"])

grouped = df.groupby(level=0).apply(func).reset_index()
print(grouped)

ВЫХОД:

   ID STATUS1 STATUS2 FINAL STATUS
0  12      OK      OK           KO
1  13      OK      OK           OK
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...