Поиск в отфильтрованном фрейме данных определенной строки и последующее создание нового столбца на основе результатов (Python / Pandas)

#python #pandas

#python #pandas

Вопрос:

Я пытаюсь отфильтровать свой фрейм данных (больница) для ситуаций, когда столбец «кровотечение из мозга» имеет значение True. Затем я хочу выполнить поиск в столбце brain_info для определенного слова («рак), а затем создать новый столбец с этим словом («рак»).).

Я делал это раньше в ситуациях без компонента фильтрации, но у меня возникли проблемы с этим сценарием.

 #What I have

| brain bleeding| brain info  |                                 |final diagnosis|
|---------------|-------------|                                 ----------------
| True          | BlahBlahBlah|       I want to add this column |               |
| True          | Cancer      |                                 |Cancer         |
| False         | Cancer      |                                 |               |


#Creating an empty column in my dataframe for the final diagnosis.
hospital["final_diagnosis"] = ""

#Filter cases where brain cancer is True
filt = (hospital["brain_bleeding"] == True)

#Search for the filtered cases if the diagnosis contains "cancer" and adds it to the corresponding "final_diagnosis" cell, if it is there. This is where my error is?
hospital.loc[filt, 'brain_info'].str.contains("cancer", case=False, na=False), "final diagnosis"] = "cancer"

 

Может кто-нибудь мне помочь? Спасибо

Ответ №1:

Предполагая, что ваш файл:

 brain_bleeding  brain_info
True            BlahBlahBlah
True            Cancer
False           Cancer
 

Вы можете попробовать следующее:

 #!/usr/bin/python
# -*- coding: utf-8 -*-
import pandas as pd

hospital = pd.read_csv('file.csv', sep='t')

# add True to final_diagnosis column if brain is bleeding and brain info is cancer
hospital.loc[(hospital['brain_bleeding'] == True) amp; 
             (hospital['brain_info'] == 'Cancer'), 'final_diagnosis'] = True
hospital['final_diagnosis'].fillna('', inplace=True) # replace NaN with empty strings

print(hospital)
 

Вывод:

 
   brain_bleeding    brain_info final_diagnosis
0            True  BlahBlahBlah                
1            True        Cancer            True
2           False        Cancer        
 

Примечание: я добавил два условия на основе final_diagnosis столбца из вашего примера — похоже, вам, возможно, нужно только одно условие (при необходимости освободите два, удалите одно из них).