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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

根據(jù)來自另一個數(shù)據(jù)幀的值替換數(shù)據(jù)幀的值

根據(jù)來自另一個數(shù)據(jù)幀的值替換數(shù)據(jù)幀的值

四季花海 2022-10-18 16:06:05
如何基于另一個查找數(shù)據(jù)框在一個數(shù)據(jù)框之間合并。這是我要替換值的數(shù)據(jù)框 A:  InfoType  IncidentType    DangerType0   NaN          A             NaN1   NaN          C             NaN2   NaN          B            C3   NaN          B            NaN這是查找表:    ID  ParamCode   ParamValue  ParmDesc1   ParamDesc2  SortOrder   ParamStatus0   1   IncidentType    A       ABC            DEF          1            11   2   IncidentType    B       GHI            JKL          2            12   3   IncidentType    C       MNO            PQR          7            12   3   DangerType      C       STU            VWX          6            1預(yù)期輸入:  InfoType  IncidentType    DangerType0   NaN          ABC           NaN1   NaN          MNO           NaN2   NaN          GHI           STU3   NaN          GHI           NaN請注意,這ParamCode是列名,我需要替換ParamDesc1為數(shù)據(jù)框 A 中的相應(yīng)列。數(shù)據(jù)框 A 中的每一列都可能有 NaN,我不打算刪除它們。只是忽略它們。這就是我所做的:ntf_cols = ['InfoType','IncidentType','DangerType']for c in ntf_cols:    if (c in ntf.columns) & (c in param['ParamCode'].values):        paramValue = param['ParamValue'].unique()        for idx, pv in enumerate(paramValue):            ntf['NewIncidentType'] = pd.np.where(ntf.IncidentType.str.contains(pv), param['ParmDesc1'].values, "whatever")錯誤 :ValueError: 操作數(shù)不能與形狀 (25,) (13,) () 一起廣播
查看完整描述

2 回答

?
青春有我

TA貢獻1784條經(jīng)驗 獲得超8個贊

編輯: Lambda 的回答給了我一個想法,讓我知道如何對要將此邏輯模式應(yīng)用于的許多列執(zhí)行此操作:


import pandas as pd


df1 = pd.DataFrame(dict(

    InfoType = [None, None, None, None],

    IncidentType = 'A C B B'.split(),

    DangerType = [None, None, 'C', None],

))


df2 = pd.DataFrame(dict(

    ParamCode = 'IncidentType IncidentType IncidentType DangerType'.split(),

    ParamValue  = 'A B C C'.split(),

    ParmDesc1 = 'ABC GHI MNO STU'.split(),

))



for col in df1.columns[1:]:

    dict_map = dict(

        df2[df2.ParamCode == col][['ParamValue','ParmDesc1']].to_records(index=False)

    )

    df1[col] = df1[col].replace(dict_map)


print(df1)


這假設(shè) in 第一列之后的每一列df1都是需要更新的列,并且要更新的列名作為 的'ParamCode'列中的值存在df2。


Python 導(dǎo)師鏈接到代碼


這個問題可以使用一些自定義函數(shù)和pandas.Series.apply()來解決:


import pandas as pd


def find_incident_type(x):

    if pd.isna(x):

        return x

    return df2[

        (df2['ParamCode'] == 'IncidentType') & (df2['ParamValue']==x)

    ]["ParmDesc1"].values[0]



def find_danger_type(x):

    if pd.isna(x):

        return x

    return df2[

        (df2['ParamCode'] == 'DangerType') & (df2['ParamValue']==x)

    ]["ParmDesc1"].values[0]



df1 = pd.DataFrame(dict(

    InfoType = [None, None, None, None],

    IncidentType = 'A C B B'.split(),

    DangerType = [None, None, 'C', None],

))


df2 = pd.DataFrame(dict(

    ParamCode = 'IncidentType IncidentType IncidentType DangerType'.split(),

    ParamValue  = 'A B C C'.split(),

    ParmDesc1 = 'ABC GHI MNO STU'.split(),

))


df1['IncidentType'] = df1['IncidentType'].apply(find_incident_type)

df1['DangerType'] = df1['DangerType'].apply(find_danger_type)


print(df1)


單步執(zhí)行python教程中的代碼


很有可能有更有效的方法來做到這一點。希望有知道的人分享一下。


df2此外,來自外部作用域的 ref被硬編碼到自定義函數(shù)中,因此僅適用于外部作用域中的變量名。如果您不希望這些函數(shù)依賴于該引用,則需要為pandas.Series.apply'參數(shù)使用參數(shù)。args


查看完整回答
反對 回復(fù) 2022-10-18
?
繁花不似錦

TA貢獻1851條經(jīng)驗 獲得超4個贊

使用查找表制作一個dict,然后替換原始數(shù)據(jù)框的列值。假設(shè)原始數(shù)據(jù)框是df1并且查找表是df2


...

dict_map = dict(zip(df2.ParamCode + "-" + df2.ParamValue, df2.ParmDesc1))


df1['IncidentType'] = ("IncidentType" +'-'+ df1.IncidentType).replace(dict_map)

df1['DangerType'] = ("DangerType" +'-'+ df1.DangerType).replace(dict_map)

...


查看完整回答
反對 回復(fù) 2022-10-18
  • 2 回答
  • 0 關(guān)注
  • 132 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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