gpt4 book ai didi

python - Pandas 版本的“如果为真,则在此处进行 VLOOKUP,如果为假,则在其他地方进行 VLOOKUP

转载 作者:太空宇宙 更新时间:2023-11-03 13:56:29 27 4
gpt4 key购买 nike

我正在尝试将大型数据集及其处理从 Excel 转换到 Python/Pandas,但在尝试实现“IF(col A = x, VLOOKUP(col表 Y 中的 B),否则,VLOOKUP(表 Z 中的 A 列))”。

我已经创建了两个单独的字典,它们将用作表 Y 和 Z 的 pandas 版本,但我一直无法找到可以告诉 pandas 使用 B 列中的值来查找字典的结构。

用 pandas 尝试这个:

# 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       ITEM
0 PK PK3 1000 Packaging
1 ML PK4 900 Mix
2 ML PK4 800 Mix
3 CM PK9 700 Textile

当我要找的是:

  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

或者,更简单地说:如果 PROD_TYPE'PK',从 中的 PKG_TYPE 列中查找值pack_dict;否则,在 prod_dict 中查找 PROD_TYPE

如有任何帮助,我们将不胜感激!

最佳答案

这就是我解决这个问题的方法:

# 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(条件,真值,假值)

关于python - Pandas 版本的“如果为真,则在此处进行 VLOOKUP,如果为假,则在其他地方进行 VLOOKUP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54952391/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com