簡體   English   中英

根據條件將多列中的值替換為 Pandas

[英]Replacing values in multiple columns with Pandas based on conditions

我有一個非常大的 dataframe ,我只想更改一小部分連續列中的值。 基本上,在這些列中,值要么是整數,要么是 null。 我只想在那些列中用“否”替換 0 和空值,用“是”替換其他所有內容

在 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 不適用於多維鍵。 我什至通過創建一個額外的變量來嘗試將列作為列表而不是 integer 索引

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 在將最初是整數的列轉換為否/是時也存在問題。 我不需要這樣做,我可能只是錯過了 pandas 希望內置的一些簡單的東西

在一個非常偽代碼的描述中,我真正想要的是這個

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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM