Заполните новый столбец в фрейме данных с помощью условной логики

#python #pandas #dataframe

Вопрос:

Я дал условие, чтобы заполнить новый столбец на строку, которая была Game [Type A, Type B, Type C]: Played, ELSE: Status , по идее это если Game столбец имеет любой из элементов в списке, который является Type A или Type B , либо Type C , то новый столбец должен иметь строку Played , и если Game есть другие строки, которые не указаны в списке, тогда новый столбец должен иметь значение в соответствующем столбце Status .

full_string = "Game [Type A, Type B, Type C]: Played, ELSE: Status"

Из полной строки мне удалось получить список параметров, имена столбцов и параметр «Еще». Они находятся в следующих переменных:

options = ['Type A', 'Type B', 'Type C'] #this is a list
col_to_check = 'Game'
value_if_met = 'Played'
else_use_col = 'Status' new_col_name = 'Result'

Я не знаю, как я могу заполнить new_col_name , используя вышеуказанные данные для следующего кадра данных?

 df = pd.DataFrame(  {  'ID': ['AB01', 'AB02', 'AB03', 'AB04', 'AB05','AB06'],  'Game': ['Type A','Type B','Type A','Type C','Type D','Type D'],  'Status': ['Won', 'Draw', 'Won', np.nan, 'Won',np.nan]  }  )   

Новый столбец должен содержать 'Result':['Played','Played','Played','Played','Won',np.nan] указанный выше фрейм данных.

Ответ №1:

Вы можете использовать numpy.where функцию, чтобы получить требуемые значения; используйте .isin метод , чтобы проверить, является ли значение столбца Game одним из [Type A, Type B, Type C] , назначить Played True значения и назначить Status значения столбцов для значений False :

 gt;gt;gt; np.where(df['Game'].isin(['Type A', 'Type B', 'Type C']), ['Played'], df['Status']) array(['Played', 'Played', 'Played', 'Played', 'Won', nan], dtype=object)  

Вы можете назначить его в качестве нового столбца:

 df['Result'] = np.where(df['Game'].isin(['Type A', 'Type B', 'Type C']),  ['Played'],  df['Status'])   ID Game Status Result 0 AB01 Type A Won Played 1 AB02 Type B Draw Played 2 AB03 Type A Won Played 3 AB04 Type C NaN Played 4 AB05 Type D Won Won 5 AB06 Type D NaN NaN