Pandas:使用多个条件设置变量

2024-04-24 18:56:51 发布

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

给定以下数据帧:

df = pd.DataFrame({"code": ["codeA",
                            "Codeb",
                            "codeB",
                            "codea",
                            "N/A",
                            "N/A"], 
                   "warehouse": [20, 
                                 30, 
                                 10,
                                 30,
                                 10,
                                 70]})

我需要根据三个条件在列中设置一个变量:

  1. 值=代码a
  2. 值=代码b
  3. 值不是codeA或codeB=“”

伪代码:

# account for case: make case insensitive
if value REGEX '(?i)codeA':
   value = "product A"
else if value REGEX '(?1)codeB':
   value = "product B"
else
   value = ""

我会使用带有apply的函数吗

我可以做前两件事,比如:

df['code'].replace(to_replace="(?i)CodeA", value="Product A", inplace=True, regex=True)
df['code'].replace(to_replace="(?i)CodeB", value="Product B", inplace=True, regex=True)

然而,我一直在试图说:“如果它与其中任何一个都不匹配,那么设置为”“。”。还想知道是否有更有效的方法使用“else”子句来实现这一点

注意:理想的解决方案是考虑输入中的人为错误——例如,不区分大小写。然而,我事先做了一个strip来解释尾随空格和前导空格


0条回答
网友
1楼 · 发布于 2024-04-24 18:56:51

使用dict映射

d = {'codea': 'Product A', 'codeb': 'Product B'}
df['code'] = df['code'].str.replace(' ', '').str.casefold()
df['code'] = df['code'].map(d).fillna('')

输出:

        code  warehouse
0  Product A         20
1  Product B         30
2  Product B         10
3  Product A         30
4                    10
5                    70
网友
2楼 · 发布于 2024-04-24 18:56:51

根据到另一列的映射设置列值的更通用方法是使用map

mapping = {'codeA': 'product A', 'codeB': 'product B'}
df['mapped_product'] = df.code.map(mapping)
df

出去

    code  warehouse mapped_product
0  codeA         20      product A
1  codeB         30      product B
2  codeB         10      product B
3  codeA         30      product A
4    N/A         10            NaN
5    N/A         70            NaN

如果您所做的只是字符串替换,则可以通过以下方式执行:

df['mapped_product'] = df.code.str.replace('code', 'product ')
df

出去

    code  warehouse mapped_product
0  codeA         20      product A
1  codeB         30      product B
2  codeB         10      product B
3  codeA         30      product A
4    N/A         10            N/A
5    N/A         70            N/A

相关问题 更多 >