在具有多个条件的 Pandas 中分支

Posted

技术标签:

【中文标题】在具有多个条件的 Pandas 中分支【英文标题】:Branching in Pandas with multiple conditions 【发布时间】:2021-05-16 22:43:46 【问题描述】:

我设法完成了基本的决策逻辑,但具有讽刺意味的是,我在一些非常基本的事情上苦苦挣扎。 我的代码在 80% 的情况下都被捕获,但在剩余 20% 的情况下需要帮助。 甚至不确定这是否称为分支或仅仅是决策树,但它是初学者的东西。

我的数据的小样本:

import pandas as pd
import numpy as np
df = pd.DataFrame(
    'Part ID' : [ 'Power Cord', 'Cat5 cable', 'Laptop', 'Hard Disk', 'Laptop Case', 'USB drive'],
    'Part Serial Number' : [111222, 999444, 888333, 141417, np.NaN, 222666], 
    'Mother s/n': [100111, 200112, 888333, 888333, 888333, np.NaN],
    )
df['Part Serial Number'] = df['Part Serial Number'].astype('Int64')
df['Mother s/n'] = df['Mother s/n'].astype('Int64')
df

这是我的代码:

df['Is mother s/n known?'] = np.where(df['Mother s/n'].isin(df['Part Serial Number']), 'Yes', 'No')
df

它给出以下输出:

正如您在图片中看到的,某些结果应该有所不同。 请问如何用 Pandas 分支我的代码来实现它?

【问题讨论】:

我可能遗漏了一些东西,但在您的 where 声明中,您只指定了“是”或“否”。那你为什么要它说“Mother S/N Unknown”或“Self”呢? 谢谢你,Sophods。不,你没有错过任何东西。它的工作原理与编写时完全一样,这正是我正在寻求帮助的原因。那么,如何以不同的方式编码来实现我想要的呢? (在图片上) 例如,如果我创建了下一条语句 df['Is mother s/n known?'] = np.where(df["Mother s/n"].eq(df["Part Serial Number"]), 'Self', pass) 它不适用于 Sytax Error 因为我做错了什么。 【参考方案1】:

您可以使用select 在多个条件之间进行选择(而不仅仅是在where 中的两个之间):

import pandas as pd
import numpy as np
df = pd.DataFrame(
    'Part ID' : [ 'Power Cord', 'Cat5 cable', 'Laptop', 'Hard Disk', 'Laptop Case', 'USB drive'],
    'Part Serial Number' : [111222, 999444, 888333, 141417, np.NaN, 222666], 
    'Mother s/n': [100111, 200112, 888333, 888333, 888333, np.NaN],
    )
df['Part Serial Number'] = df['Part Serial Number'].astype('Int64')
df['Mother s/n'] = df['Mother s/n'].astype('Int64')

conditions = [df['Mother s/n'].eq(df['Part Serial Number']).fillna(False).astype(bool),
              df['Mother s/n'].fillna(-1).isin(df['Part Serial Number']),
              df['Mother s/n'].isna()]
choices = ['Self', 'Yes', 'Mother s/n unknown']
df['Is mother s/n known?'] = np.select(conditions, choices, 'No')

结果:

       Part ID  Part Serial Number  Mother s/n Is mother s/n known?
0   Power Cord              111222      100111                   No
1   Cat5 cable              999444      200112                   No
2       Laptop              888333      888333                 Self
3    Hard Disk              141417      888333                  Yes
4  Laptop Case                <NA>      888333                  Yes
5    USB drive              222666        <NA>   Mother s/n unknown

【讨论】:

哇这太棒了!谢谢你,Stef 成功了! np.select 是要走的路,+1

以上是关于在具有多个条件的 Pandas 中分支的主要内容,如果未能解决你的问题,请参考以下文章

python pandas - 生成具有多个条件的视图/复制警告过滤数据框

Pandas:过滤具有多个字符串条件的行[重复]

FillNaN 具有多个条件并在 Pandas 中使用 n-1 和 n+2 值

如何使用for循环或条件在pandas数据框的子集中创建多个回归模型(statsmodel)?

pandas:如果在循环中遇到条件,则更新值

如何遍历具有多个分支的树