第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Python:搜索多列并識(shí)別包含列表中任何元素的行

Python:搜索多列并識(shí)別包含列表中任何元素的行

夢(mèng)里花落0921 2022-12-27 15:40:55
我最近發(fā)布了一個(gè)關(guān)于如何使用 R 進(jìn)行子集化的問題:Subset dataframe in R based on a list specified in a vector (using a 'starts with' expression or equivalent)用戶@Ric S 非常友好地提供了這個(gè)問題的 R 答案。R 解決方案是:library(dplyr)df %>%   filter_at(vars(-ID), any_vars(grepl(paste(medications, collapse = "|"), .)))但是,我的印象是 Python 可能更省時(shí)??偠灾?,我試圖在超過(guò) 100 萬(wàn)行的數(shù)據(jù)集中識(shí)別任何參與者規(guī)定的他汀類藥物和基于此的子集。我有一個(gè)列表,其中包含這些藥物的所有代碼(為了演示目的,我剛剛編造了一些代碼),接下來(lái)我想搜索數(shù)據(jù)框并將其子集給任何擁有“以”開頭的藥物代碼的人"列表中的任何元素。示例中的循環(huán)似乎是多余的,但我將為一些藥物類別運(yùn)行此代碼。示例數(shù)據(jù)集,稱為meds_df:     ID readcode_1 readcode_2 generic_name1  1001       bxd1 1146785342  Simvastatin2  1002       <NA>       <NA>         <NA>3  1003       <NA>       <NA>  Pravastatin4  1004       <NA>       <NA>         <NA>5  1005       bxd4   45432344         <NA>6  1006       <NA>       <NA>         <NA>7  1007       <NA>       <NA>         <NA>8  1008       <NA>       <NA>         <NA>9  1009       <NA>       <NA>         <NA>10 1010       bxde       <NA>         <NA>11 1011       <NA>       <NA>         <NA>預(yù)期輸出為:     ID readcode_1 readcode_2 generic_name1  1001       bxd1 1146785342  Simvastatin3  1003       <NA>       <NA>  Pravastatin5  1005       bxd4   45432344         <NA>10 1010       bxde       <NA>         <NA>到目前為止,我的代碼基于其他 stackoverflow 問題,我還需要在此處嵌入 any() 或等效項(xiàng):list_to_extract = ["bxd", "Simvastatin", "1146785342", "45432344", "Pravastatin"]variable_list = ['statins']for m in variable_list:    print('extracting individuals prescribed %s' %m)test = meds_df.loc[meds_df['readcode_1', 'readcode_2','generic_name'].str.startswith(list_to_extract, na=False)]    print(test)收到錯(cuò)誤:KeyError: ('readcode_1', 'readcode_2','generic_name')任何幫助將不勝感激!
查看完整描述

3 回答

?
溫溫醬

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊

首先,正確的語(yǔ)法是meds_df[['readcode_1', 'readcode_2','generic_name']](list索引切片中的列名)。這就是為什么你得到一個(gè)KeyError.


要回答您的問題,這是一種實(shí)現(xiàn)方法:


# Updated to use tuple per David's suggestion

idx = pd.concat((med_df[col].astype(str).str.startswith(tuple(list_to_extract)) for col in ['readcode_1', 'readcode_2','generic_name']), axis=1).any(axis=1)


med_df.loc[idx]

結(jié)果:


      ID readcode_1    readcode_2 generic_name

1   1001       bxd1  1.146785e+09  Simvastatin

3   1003        NaN           NaN  Pravastatin

5   1005       bxd4  4.543234e+07          NaN

10  1010       bxde           NaN          NaN


查看完整回答
反對(duì) 回復(fù) 2022-12-27
?
繁花如伊

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個(gè)贊

您可以通過(guò)這種方式進(jìn)行申請(qǐng):


list_to_extract = ["bxd", "Simvastatin", "1146785342", "45432344", "Pravastatin"]


bool_df = df[['readcode_1', 'readcode_2','generic_name']].apply(lambda x: x.str.startswith(tuple(list_to_extract), na=False), axis=1)


df.loc[bool_df[bool_df.any(axis=1)].index]

輸出:


    ID  readcode_1  readcode_2  generic_name

1   1001    bxd1    1.146785e+09    Simvastatin

3   1003    NaN     NaN             Pravastatin

5   1005    bxd4    4.543234e+07    NaN

10  1010    bxde    NaN             NaN

感謝 r.ook 發(fā)現(xiàn)了一個(gè)小錯(cuò)誤


查看完整回答
反對(duì) 回復(fù) 2022-12-27
?
叮當(dāng)貓咪

TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個(gè)贊

另一種解決方案,在重新創(chuàng)建數(shù)據(jù)幀之前,字符串處理發(fā)生在 vanilla python 中:


list_to_extract = ["bxd", "Simvastatin", "1146785342", "45432344", "Pravastatin"]


cols_to_search = ['readcode_1', 'readcode_2','generic_name']


output = [(ID, *searchbox) 

          for ID, searchbox in zip(df.ID,df.filter(cols_to_search).to_numpy())

          if any([str(box).startswith(tuple(list_to_extract)) for box in searchbox])]


pd.DataFrame(output, columns = df.columns)



     ID readcode_1  readcode_2  generic_name

0   1001    bxd1     1.146785e+09   Simvastatin

1   1003    NaN      NaN            Pravastatin

2   1005    bxd4     4.543234e+07   NaN

3   1010    bxde     NaN            NaN


查看完整回答
反對(duì) 回復(fù) 2022-12-27
  • 3 回答
  • 0 關(guān)注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)