Условный выбор по нескольким столбцам — Python

#python #pandas

#python #pandas

Вопрос:

У меня есть следующая таблица, загруженная в виде фрейма данных в Python с использованием pandas

  -------- ------- ------ 
| Number | Col1  | Col2 |
 -------- ------- ------ 
| ABC    | TRUE  | SFG  |
| BCD    | TRUE  |      |
| CDE    | FALSE | SFG  |
| DEF    | FALSE |      |
| FEG    | TRUE  | JJI  |
 -------- ------- ------ 
  

Число, Col2 — строка; Col1 — логическое значение

Я хочу выбрать строки из этого df , используя следующую логику

 IF Col1 = TRUE and Col2 is not null Select Number   ","   Col2
ELSE IF Col1 = TRUE and Col2 is null Select Number
ELSE IF Col2 is not null and Col1 = FALSE Select Col2
  

В приведенном выше случае выводом должен быть список со следующими значениями

 ["ABC", "SFG", "BCD", "FEG", "JJI"] //Removing the repetition too ("SFG")
  

Как мне реализовать эту логику в Python с использованием Pandas?

Комментарии:

1. хммм, я ['ABC,SFG', 'BCD', 'SFG', nan, 'FEG,JJI'] следую вашей логике

2. вероятно, вы захотите использовать вложенные numpy.where инструкции.

Ответ №1:

используйте where stack tolist

 pd.concat([df.Number.where(df.Col1, np.nan), df.Col2], axis=1).stack().tolist()

['ABC', 'SFG', 'BCD', 'SFG', 'FEG', 'JJI']
  

чтобы получить уникальный список

 pd.concat([df.Number[df.Col1], df.Col2.dropna()]).unique().tolist()

['ABC', 'BCD', 'FEG', 'SFG', 'JJI']
  

Ответ №2:

Вот реализация вашего запроса в несколько этапов:

 import pandas as pd
df = pd.DataFrame(data={'Number': ['ABC', 'BCD', 'CDE', 'DEF', 'FEG'],
                        'Col1': [True, True, False, False, True],
                        'Col2': ['SFG', None, 'SFG', None, 'JJI']})
cond1 = df.Col1 amp; ~df.Col2.isnull()
cond2 = df.Col1 amp; df.Col2.isnull()
cond3 = ~df.Col1 amp; ~df.Col2.isnull()
selects = [df[cond1].Number   ','   df[cond1].Col2, 
           df[cond2].Number, 
           df[cond3].Col2]
result = pd.concat(selects).sort_index()
  

result является (таким же, как предсказывал @MaxU)

 0    ABC,SFG
1        BCD
2        SFG
4    FEG,JJI
dtype: object