열의 작은 연속 하위 집합에서만 값을 변경하려는 매우 큰 데이터 프레임이 있습니다. 기본적으로 해당 열에서 값은 정수 또는 널입니다. 내가 원하는 것은 0과 null을 'No'로 바꾸고 나머지는 모두 해당 열에서만 'Yes'로 바꾸는 것입니다.
R에서는 기본적으로 하나의 라이너로 수행 할 수 있습니다.
df <- df %>%
mutate_at(vars(MCI:BNP), ~factor(case_when(. > 0 ~ 'Yes',
TRUE ~ 'No')))
그러나 우리는 Python으로 작업하고 있으며 Pandas를 사용하여 동등한 것을 파악할 수 없습니다. 단일 열만 변경할 때 잘 작동하는 loc 및 iloc을 엉망으로 만들었지 만 여러 열을 수정할 때 뭔가 누락되어야합니다. 그리고 다른 stackoverflow 답변에서 찾은 답변은 모두 일부 조건 집합에 따라 단일 열의 값을 변경하는 것입니다.
col1 = df.columns.get_loc("MCI")
col2 = df.columns.get_loc("BNP")
df.iloc[:,col1:col2]
원하는 열을 얻을 수 있지만 loc을 호출하려고하면 다차원 키로 작동하지 않습니다. 추가 변수를 만들어 정수 인덱스 대신 목록으로 열을 사용하여 시도했습니다.
binary_var = ['MCI','PVD','CVA','DEMENTIA','CPD','RD','PUD','MLD','DWOC','DWC','HoP','RND','MALIGNANCY','SLD','MST','HIV','AKF',
'ARMD','ASPHY','DEP','DWLK','DRUGA','DUOULC','FALL','FECAL','FLDELEX','FRAIL','GASTRICULC','GASTROULC','GLAU','HYPERKAL',
'HYPTEN','HYPOKAL','HYPOTHYR','HYPOXE','IMMUNOS','ISCHRT','LIPIDMETA','LOSWIGT','LOWBAK','MALNUT','OSTEO','PARKIN',
'PNEUM','RF','SEIZ','SD','TUML','UI','VI','MENTAL','FUROSEMIDE','METOPROLOL','ASPIRIN','OMEPRAZOLE','LISINOPRIL','DIGOXIN',
'ALDOSTERONE_ANTAGONIST','ACE_INHIBITOR','ANGIOTENSIN_RECEPTOR_BLOCKERS','BETA_BLOCKERSDIURETICHoP','BUN','CREATININE',
'SODIUM','POTASSIUM','HEMOGLOBIN','WBC_COUNT','CHLORIDE','ALBUMIN','TROPONIN','BNP']
df.loc[df[binary_var] == 0, binary_var]
그러나 그런 다음 해당 열 이름에 대한 색인을 전혀 찾을 수 없습니다. Pandas는 원래 정수였던 열을 No / Yes로 변환하는 데 문제가 있다고 생각합니다. 제자리에서이 작업을 수행 할 필요는 없습니다. 판다 스가 내장 한 간단한 것을 놓치고있을 것입니다.
매우 의사 코드 설명에서 내가 정말로 원하는 것은
if(df.iloc[:,col1:col2] == 0 || df.iloc[:,col1:col2].isnull())
df ONLY in that subset of column = 'No'
else
df ONLY in that subset of column = 'Yes'
사용하다:
df.loc[:, 'MCI':'BNP'] = np.where(df.loc[:, 'MCI':'BNP'] > 0, 'Yes', 'No')
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다