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

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

Pandas 版本的“如果為真,則在此處 VLOOKUP,如果為假,則在其他地方進行 VLOOKUP

Pandas 版本的“如果為真,則在此處 VLOOKUP,如果為假,則在其他地方進行 VLOOKUP

蕪湖不蕪 2021-11-23 19:10:12
我正在嘗試將大型數(shù)據(jù)集及其處理從 Excel 轉(zhuǎn)換為 Python/Pandas,并且在嘗試實現(xiàn)“IF(col A = x, VLOOKUP(col B in table Y),否則為 VLOOKUP(表 Z 中的列 A))”。我創(chuàng)建了兩個單獨的字典,它們將用作表 Y 和 Z 的 Pandas 版本,但我一直無法找到可以告訴 Pandas 使用 B 列中的值在字典中查找的構(gòu)造。用熊貓嘗試這個:# Created a function to map the values from#  PROD_TYPE to the prod_dict.def map_values(row, prod_dict):    return prod_dict[row]# Created the dictionaries / old VLOOKUP tables.prod_dict = {'PK': 'Packaging',               'ML': 'Mix',               'CM': 'Textile',               'NK': 'Metallic'}pack_dict = {'PK3' : 'Misc Packaging',             'PK4' : 'Mix Packaging',             'PK9' : 'Textile Packaging'}df = pd.DataFrame({'PROD_TYPE' : ['PK', 'ML', 'ML', 'CM'],                    'PKG_TYPE': ['PK3', 'PK4', 'PK4', 'PK9'],                   'VALUE': [1000, 900, 800, 700]})# Apply the map_values function.df['ITEM'] = df['PROD_TYPE'].apply(map_values, args = (prod_dict,))我得到:  PROD_TYPE PKG_TYPE  VALUE       ITEM0        PK      PK3   1000  Packaging1        ML      PK4    900        Mix2        ML      PK4    800        Mix3        CM      PK9    700    Textile當(dāng)我正在尋找的是:  PROD_TYPE PKG_TYPE  VALUE            ITEM0        PK      PK3   1000  Misc Packaging1        ML      PK4    900             Mix2        ML      PK4    800             Mix3        CM      PK9    700         Textile或者,更簡單地說:如果PROD_TYPE是'PK',則從; 中的列PKG_TYPE中查找值pack_dict。否則,PROD_TYPE在prod_dict.任何幫助,將不勝感激!
查看完整描述

3 回答

?
慕無忌1623718

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

這是我將如何解決這個問題:


# First we make two dataframes out of the dictionaries with pd.melt

df2 = pd.DataFrame(prod_dict, index=[0])

df3 = pd.DataFrame(pack_dict, index=[0])


df2 = df2.melt(var_name=['PROD_TYPE'], value_name = 'ITEM')

df3 = df3.melt(var_name=['PKG_TYPE'], value_name = 'ITEM')


# df2

    PROD_TYPE   ITEM

0   PK          Packaging

1   ML          Mix

2   CM          Textile

3   NK          Metallic


# df3

    PKG_TYPE    ITEM

0   PK3         Misc Packaging

1   PK4         Mix Packaging

2   PK9         Textile Packaging


# Now we can merge our information together on keycolumns PROD_TYPE and PKG_TYPE

df_final = pd.merge(df, df2, on='PROD_TYPE')

df_final = pd.merge(df_final, df3, on='PKG_TYPE')


    PROD_TYPE   PKG_TYPE    VALUE   ITEM_x      ITEM_y

0   PK          PK3         1000    Packaging   Misc Packaging

1   ML          PK4         900     Mix         Mix Packaging

2   ML          PK4         800     Mix         Mix Packaging

3   CM          PK9         700     Textile     Textile Packaging


# Finally we use np.where to conditionally select the values we need 

df_final['ITEM'] = np.where(df_final.PROD_TYPE == 'PK', df_final.ITEM_y, df_final.ITEM_x)


# Drop columns which are not needed in output

df_final.drop(['ITEM_x', 'ITEM_y'], axis=1, inplace=True)

輸出


    PROD_TYPE   PKG_TYPE    VALUE   ITEM

0   PK          PK3         1000    Misc Packaging

1   ML          PK4         900     Mix

2   ML          PK4         800     Mix

3   CM          PK9         700     Textile

np.where來自numpy模塊,工作原理如下:

np.where(condition, true value, false value)


查看完整回答
反對 回復(fù) 2021-11-23
?
烙印99

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

類似于@Erfan 的回答,使用numpy.where但跳過meltto use pd.Series.map()。使用問題中的變量:


In []: df['ITEM'] = pd.np.where(df.PROD_TYPE == "PK",

                                df.PKG_TYPE.map(pack_dict),

                                df.PROD_TYPE.map(prod_dict))


In []: df

Out[]:

  PROD_TYPE PKG_TYPE  VALUE            ITEM

0        PK      PK3   1000  Misc Packaging

1        ML      PK4    900             Mix

2        ML      PK4    800             Mix

3        CM      PK9    700         Textile

請注意,numpy已經(jīng)由 加載pandas,只需使用pd.np.


查看完整回答
反對 回復(fù) 2021-11-23
?
吃雞游戲

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

一種方法是:


df["ITEM"]= [pack_dict[row[1]["PKG_TYPE"]] 

    if row[1]["PROD_TYPE"] == "PK"     

    else     prod_dict[row[1]["PROD_TYPE"]] 

    for row in df.iterrows()]

我發(fā)現(xiàn)這比 Erfan 的解決方案快 10 倍。


查看完整回答
反對 回復(fù) 2021-11-23
  • 3 回答
  • 0 關(guān)注
  • 235 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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