Python 嵌套if条件以在dataframe中创建新列
我有一个如下所示的数据框:Python 嵌套if条件以在dataframe中创建新列,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个如下所示的数据框: |userid|rank2017|rank2018| |212 |'H' |'H' | |322 |'L' |'H | |311 |'H' |'L' | 我想在上面的数据框中创建一个名为progress的新列,如果rank2017等于rank2018,它将输出1;如果rank2017为“H”,它将输出2;如果rank2018为“L”,它将输出3。有谁能帮我在python中执行此操作吗这里有一种方法
|userid|rank2017|rank2018|
|212 |'H' |'H' |
|322 |'L' |'H |
|311 |'H' |'L' |
我想在上面的数据框中创建一个名为progress的新列,如果rank2017等于rank2018,它将输出1;如果rank2017为“H”,它将输出2;如果rank2018为“L”,它将输出3。有谁能帮我在python中执行此操作吗这里有一种方法。您不需要使用嵌套的if语句
df = pd.DataFrame({'user': [212, 322, 311],
'rank2017': ['H', 'L', 'H'],
'rank2018': ['H', 'H', 'L']})
df['progress'] = 3
df.loc[(df['rank2017'] == 'L') & (df['rank2018'] == 'H'), 'progress'] = 2
df.loc[df['rank2017'] == df['rank2018'], 'progress'] = 1
# rank2017 rank2018 user progress
# 0 H H 212 1
# 1 L H 322 2
# 2 H L 311 3
下面是一种使用
np的方法。选择:
# Set your conditions:
conds = [(df['rank2017'] == df['rank2018']),
(df['rank2017'] == 'H') & (df['rank2018'] == 'L')]
# Set the values for each conditions
choices = [1, 2]
# Use np.select with a default of 3 (your "else" value)
df['progress'] = np.select(conds, choices, default = 3)
返回:
>>> df
userid rank2017 rank2018 progress
0 212 H H 1
1 322 L H 3
2 311 H L 2
你的意思是“如果rank2018是'H'而rank2017是'L'”吗?不确定你的第二个条件;在我的回答中,我使用了“如果2017年排名为‘H’,而2018年排名为‘L’”。。。