首页 > 解决方案 > 根据许多数字列(熊猫)上的条件创建单个分类列

问题描述

我有一个像这样的熊猫数据框

东风:

sEXT | sNEU | sAGR | sCON | sOPN
2.4  | 3    | 2    | 2    | 5
3    | 1    | 4    | 2.7  | 1.5

我想根据以下规则创建一个列“类型”。如果 sEXT > 2.5 将字符串“E”添加到状态,否则添加“I”。如果 sNEU > 2.5 将字符串“N”添加到状态,否则添加“S”。如果 sAGR > 2.5 将字符串“A”添加到状态,否则添加“H”。如果 sCON > 2.5 将字符串“C”添加到状态,否则添加“S”。如果 sOPN > 2.5 将字符串“O”添加到状态,否则添加“C”。

我的预期输出是:

sEXT | sNEU | sAGR | sCON | sOPN | type
2.4  | 3    | 2    | 2    | 5    | "INHSO"
3    | 1    | 4    | 2.7  | 1.5  | "ESACC"

我在尝试

df['type']=None
df['type'].loc[df['sEXT']>2.5]='E'
df['type'].loc[df['sEXT']<2.5]='I'

但我不知道如何继续。你能帮助我吗?

标签: pythonpython-3.xpandas

解决方案


您可以编写一个创建字符串的函数,然后将数据框应用于该函数:

import pandas as pd

data = [ { "sEXT": 2.4, "sNEU": 3, "sAGR": 2, "sCON": 2, "sOPN": 5 }, { "sEXT": 3, "sNEU": 1, "sAGR": 4, "sCON": 2.7, "sOPN": 1.5 } ]
df = pd.DataFrame(data)

def generate_type(row):
    text = ''
    if row['sEXT'] > 2.5:
        text += 'E'
    else:
        text += 'I'
    if row['sNEU'] > 2.5:
        text += 'N'
    else:
        text += 'S'
    if row['sAGR'] > 2.5:
        text += 'A'
    else:
        text += 'H'
    if row['sCON'] > 2.5:
        text += 'C'
    else:
        text += 'S'
    if row['sOPN'] > 2.5:
        text += 'O'
    else:
        text += 'C'
    return text
        
df['type']= df.apply(generate_type, axis=1)

结果:

sEXT 新能源大学 萨格瑞 sCON 索普 类型
0 2.4 3 2 2 5 异烟肼
1 3 1 4 2.7 1.5 欧空局

推荐阅读