Case_When函数从R到Python
问题描述
如何在python代码中实现R的Case_When函数?
以下是R:的Case_When函数
https://www.rdocumentation.org/packages/dplyr/versions/0.7.8/topics/case_when
作为最小的工作示例,假设我们有以下数据帧(以下是python代码):
import pandas as pd
import numpy as np
data = {'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
'age': [42, 52, 36, 24, 73],
'preTestScore': [4, 24, 31, 2, 3],
'postTestScore': [25, 94, 57, 62, 70]}
df = pd.DataFrame(data, columns = ['name', 'age', 'preTestScore', 'postTestScore'])
df
假设我们要创建一个名为‘Old’的新列,该列查看‘age’列并执行以下操作:
if age < 10 then baby
if age >= 10 and age < 20 then kid
if age >=20 and age < 30 then young
if age >= 30 and age < 50 then mature
if age >= 50 then grandpa
有人能帮忙吗?
解决方案
您要使用np.select
:
conditions = [
(df["age"].lt(10)),
(df["age"].ge(10) & df["age"].lt(20)),
(df["age"].ge(20) & df["age"].lt(30)),
(df["age"].ge(30) & df["age"].lt(50)),
(df["age"].ge(50)),
]
choices = ["baby", "kid", "young", "mature", "grandpa"]
df["elderly"] = np.select(conditions, choices)
# Results in:
# name age preTestScore postTestScore elderly
# 0 Jason 42 4 25 mature
# 1 Molly 52 24 94 grandpa
# 2 Tina 36 31 57 mature
# 3 Jake 24 2 62 young
# 4 Amy 73 3 70 grandpa
conditions
和choices
列表的长度必须相同。
还有一个default
参数,当所有conditions
求值为False
时使用。
相关文章