python - 如何根据不同列中的值将一列添加到 pandas 数据框?

标签 python pandas dataframe

我有一个如下所示的 Pandas 数据框:

a     b    c    d   
0.7   0.1  0.2  0.3
0.5   0.2  0.2  0.2

我正在编写一些如下所示的嵌套循环,以添加基于这 4 列的列结果。

def class_decider(df):
    for i in df['a']:
        if i > 0.6:
            a = "class A"
        elif:
            for j in df['b']:
                if j > 0.2:
                    a = "class B"
                elif:
                    for k in df['c']:
                        if j > 0.15:
                            a = "class C"
                        elif:
                            for l in df['d']:
                                if l > 0.10:
                                    a = "class D"
                                else:
                                    a = "null"
    return a

谁能帮忙优化一下代码。

预期输出:

a     b    c    d     result
0.7   0.1  0.2  0.3   class A
0.5   0.2  0.2  0.2   class C

最佳答案

IIUC,您可以将 abcd 列与 0.6 进行比较, 0.2, 0.15, 0.10 创建一个 bool 掩码,然后使用 idxmax 沿 axis=1 在此掩码上获取第一个列的名称True 值出现在掩码中。

c = ['a', 'b', 'c', 'd']
m = df[c].gt([0.6, 0.2, 0.15, 0.10])
df['Result'] = m.idxmax(1).radd('Class ').mask(~m.any(1), 'Null')

     a    b    c    d   Result
0  0.7  0.1  0.2  0.3  Class a
1  0.5  0.2  0.2  0.2  Class c

关于python - 如何根据不同列中的值将一列添加到 pandas 数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66750958/

相关文章:

python - Numpy 按列按循环对矩阵进行排序

python - Pandas shift - 如果满足多个条件,则获取先前的值

python - python 导入模块的问题

python - 显示所有符号选项在 VS Code Mac 中不起作用

python - 计算由长度不等的二维索引列表给出的 DataFrame 行组的平均值

python - 如何将多个参数传递给 panda 中的 map 函数

python - 如何在Python中按数据框过滤列表?

python - 在Python中不使用list、iter从字典中检索第一个键值对

python - QML + PyQt5 Material 风格

r - 在 R 中,如何根据另一列中的缺失 (NA) 值删除一列中具有重复(日期)值的行