Python 根据条件使用熊猫替换多列中的值

Python 根据条件使用熊猫替换多列中的值,python,pandas,Python,Pandas,我有一个非常大的数据帧,我只想在一小部分连续的列中更改值。基本上,这些列中的值不是整数就是null。我只想在这些列中用“否”替换0和null,并用“是”替换其他所有内容 在R中,这基本上可以通过一个衬里完成: df <- df %>% mutate_at(vars(MCI:BNP), ~factor(case_when(. > 0 ~ 'Yes', TRUE ~ 'No'))) 将为我获取所

我有一个非常大的数据帧,我只想在一小部分连续的列中更改值。基本上,这些列中的值不是整数就是null。我只想在这些列中用“否”替换0和null,并用“是”替换其他所有内容

在R中,这基本上可以通过一个衬里完成:

df <- df %>%
mutate_at(vars(MCI:BNP), ~factor(case_when(. > 0 ~ 'Yes',
                                           TRUE ~ 'No')))
将为我获取所需的列,但尝试调用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,“是”,“否”)
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'