pandas 数据帧中的多个 if 条件 - Python
Multiple if conditions in pandas dataframe - Python
我正在关注
的回答
我有一个 df
这样的:
score_1 score_2
1.11 NaN
2.22 3.33
NaN 3.33
NaN NaN
........
计算final_score
的规则是要求至少有一个分数为non-null
,如果其中一个分数为NULL,则final_score等于另一个分数(它具有所有权重)
这是要复制的代码:
import numpy as np
import pandas as pd
df = pd.DataFrame({
'score_1': [1.11, 2.22, np.nan],
'score_2': [np.nan, 3.33, 3.33]
})
def final_score(df):
if (df['score_1'] != np.nan) and (df['score_2'] != np.nan):
print('I am condition one')
return df['score_1'] * 0.2 + df['score_2'] * 0.8
elif (df['score_1'] == np.nan) and (df['score_2'] != np.nan):
print('I am the condition two')
return df['score_2']
elif (df['score_1'] != np.nan) and (df['score_2'] == np.nan):
print('I am the condition three')
return df['score_1']
elif (df['score_1'] == np.nan) and (df['score_2'] == np.nan):
print('I am the condition four')
return np.nan
df['final_score'] = df.apply(final_score, axis=1)
print(df)
这给了我输出:
score_1 score_2 final_score
1.11 NaN NaN
2.22 3.33 3.108
NaN 3.33 NaN
NaN NaN NaN
........
但我的预期输出如下:
score_1 score_2 final_score
1.11 NaN 1.11
2.22 3.33 3.108
NaN 3.33 3.33
NaN NaN NaN
........
第一行和第三行不是我期望的结果,谁能帮帮我,我的代码有什么问题吗?非常感谢。
让我们使用 np.where
应用您的条件
df['final_score'] =np.where(df.notna().all(1),df['score_1'] * 0.2 + df['score_2'] * 0.8,df.mean(1))
score_1 score_2 final_score
0 1.11 NaN 1.110
1 2.22 3.33 3.108
2 NaN 3.33 3.330
3 NaN NaN NaN
使用 np.isnan() 进行比较应该可以解决问题
我正在关注
我有一个 df
这样的:
score_1 score_2
1.11 NaN
2.22 3.33
NaN 3.33
NaN NaN
........
计算final_score
的规则是要求至少有一个分数为non-null
,如果其中一个分数为NULL,则final_score等于另一个分数(它具有所有权重)
这是要复制的代码:
import numpy as np
import pandas as pd
df = pd.DataFrame({
'score_1': [1.11, 2.22, np.nan],
'score_2': [np.nan, 3.33, 3.33]
})
def final_score(df):
if (df['score_1'] != np.nan) and (df['score_2'] != np.nan):
print('I am condition one')
return df['score_1'] * 0.2 + df['score_2'] * 0.8
elif (df['score_1'] == np.nan) and (df['score_2'] != np.nan):
print('I am the condition two')
return df['score_2']
elif (df['score_1'] != np.nan) and (df['score_2'] == np.nan):
print('I am the condition three')
return df['score_1']
elif (df['score_1'] == np.nan) and (df['score_2'] == np.nan):
print('I am the condition four')
return np.nan
df['final_score'] = df.apply(final_score, axis=1)
print(df)
这给了我输出:
score_1 score_2 final_score
1.11 NaN NaN
2.22 3.33 3.108
NaN 3.33 NaN
NaN NaN NaN
........
但我的预期输出如下:
score_1 score_2 final_score
1.11 NaN 1.11
2.22 3.33 3.108
NaN 3.33 3.33
NaN NaN NaN
........
第一行和第三行不是我期望的结果,谁能帮帮我,我的代码有什么问题吗?非常感谢。
让我们使用 np.where
应用您的条件df['final_score'] =np.where(df.notna().all(1),df['score_1'] * 0.2 + df['score_2'] * 0.8,df.mean(1))
score_1 score_2 final_score
0 1.11 NaN 1.110
1 2.22 3.33 3.108
2 NaN 3.33 3.330
3 NaN NaN NaN
使用 np.isnan() 进行比较应该可以解决问题