有没有办法将isin()用作dataframe中另一列的计算器函数?

2024-09-30 04:37:08 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的pandas数据框中有一列作为“PRODUCT_ID”。我想基于此列创建一个计算列,[3,5,8]中的产品_id将取值为'old',其他值为'new'

现在我使用for循环检查数据帧的每个索引

portfoy['PRODUCT_TYPE'] = np.nan

for ind in portfoy.index:
    if portfoy.loc[ind, 'PRODUCT_CODE'] in [3, 5, 8]:
        portfoy.loc[ind, 'PRODUCT_TYPE'] = 'old'
    else:
        portfoy.loc[ind, 'PRODUCT_TYPE'] = 'new'

这段代码似乎花费了很多时间。有更好的方法吗

我的数据如下所示:

^{tb1}$

Tags: 数据inidpandasnewfor产品type
2条回答

使用^{}^{}作为矢量化快速解决方案:

portfoy['PRODUCT_TYPE'] = np.where(portfoy['PRODUCT_CODE'].isin([3, 5, 8]), 'old', 'new')

可以使用遮罩条件更新数据帧

portfoy.loc[portfoy.PRODUCT_CODE.isin([3,5,8]),'PRODUCT_TYPE'] = 'old'

portfoy.loc[~portfoy.PRODUCT_CODE.isin([3,5,8]),'PRODUCT_TYPE'] = 'new'

portfoy.PRODUCT_CODE.isin([3,5,8]是掩码
~是对面具的否定

相关问题 更多 >

    热门问题