Написание новой колонки в pandas на основе другой колонки

#python #pandas #dataframe #loops

Вопрос:

Я пытаюсь присвоить значение одному столбцу на основе значений двух других столбцов, содержащих строковые значения. Я попробовал следующее, которое не генерирует никаких выходных данных и просто оставляет столбцы для заполнения пустыми. У кого-нибудь есть лучшее решение?

 for i in Table.index:
if pd.notnull(Table['Column1'][i]) and pd.notnull(Table['Column2'][i]):
Table.loc[Table['Column3'][i]] = Table['Column2'][i]
 

Ответ №1:

Используйте Series.notna с amp; для побитовых AND и заданных значений в DataFrame.loc :

 m = Table['Column1'].notna() amp; Table['Column2'].notna()
Table.loc[m, 'Column3'] = Table.loc[m, 'Column2']
 

Ответ №2:

вы можете попробовать использовать логическую маскировку и метод доступа loc:

 mask=Table['Column1'].notna() amp; Table['Column2'].notna()
Table.loc[mask,'Column3']=Table.loc[mask,'Column2']
 

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

1. Спасибо, однако это вызывает ошибку (ошибка ключа: ‘Column1’). Когда я печатаю этот столбец как отдельную команду, он не вызывает никаких ошибок.. Будет ли по-прежнему необходимо интегрировать его в цикл for с индексом i?

2. @progammerattempt хорошо, сэр, этот ответ соответствует предоставленному вами коду(bcz, вы использовали «Столбец 1» в своем коде)….пожалуйста, проверьте, присутствует ли «Столбец 1» в выводе Table.columns

3. Да, это явно присутствует, так что не уверен, что вызывает это в данный момент..

4. @programmerattempt сэр, пожалуйста, проверьте еще раз, так как ' ' по обе стороны от него могут быть пробелы

5. ..это не так, так как столбец может быть напечатан и отображается в команде столбцы..мммм