python - 根据许多数字列(熊猫)上的条件创建单个分类列
问题描述
我有一个像这样的熊猫数据框
东风:
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'
但我不知道如何继续。你能帮助我吗?
解决方案
您可以编写一个创建字符串的函数,然后将数据框应用于该函数:
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 | 欧空局 |
推荐阅读
- python - 有人可以向我解释下面提到的 python 程序的输出吗?
- automation - Azure Logic 应用程序是否有任何替代方案?开源会更好
- arduino - 如何确保 Arduino 即使在重置后也只运行这行代码一次?
- objective-c - 当点击 WkWebView 中警报内的文本字段时显示键盘
- python - Python 上 FastAPI 的依赖注入问题
- javascript - 使用 jQuery w/Electron/NodeJS 匹配一组数字以替换为文本
- javascript - 出生日期验证在 JSP 中不起作用
- python - 如果列上的值包含某些正则表达式元素,则保留行
- go - 如何在我们的 go 程序中添加 kube-config 和使用 go-client
- javascript - 如何找到值发生变化的索引