3 回答
TA贡献2080条经验 获得超4个赞
您可以传入一个函数来代替使用 lambda apply:
def f(x):
if x == 'pre_stage':
return 'a'
elif x == 'static':
return 'b'
return 'c'
df['type'] = df['id'].apply(f)
您还可以使用字典:
d = {'pre_stage': 'a', 'static': 'b'}
df['type'] = df['id'].apply(lambda x: d.get(x, 'c'))
TA贡献1998条经验 获得超6个赞
您可以在此处创建映射并使用pd.Series.map
。
mapping = {"pre_stage": "a", "static": "b"} df["type"] = df["id"].map(mapping).fillna("c")
你可以np.select
在这里使用。
condlist = [df["id"].eq("pre_stage"), df["id"].eq("static")] choicelist = ["a", "b"] df["type"] = np.select(condlist, choicelist, "c")
TA贡献1111条经验 获得超0个赞
如果您的条件要嵌套,最好为其定义一个函数。它还有助于使您的代码更清晰。
import pandas as pd
df = pd.DataFrame({'type':['pre-stage','static','not-related']})
def func(x):
if x == 'pre-stage':
return 'a'
elif x == 'static':
return 'b'
return 'c'
结果:
df['type'].apply(func) #as example, you can assign it to the frame as you did
>>
0 a
1 b
2 c
Name: type, dtype: object
添加回答
举报