Python 比较两列,如果满足条件,则添加';1';新专栏

Python 比较两列,如果满足条件,则添加';1';新专栏,python,pandas,dataframe,if-statement,Python,Pandas,Dataframe,If Statement,我不知道如何比较两列,以及一列是否大于或等于另一个数字,请在新列中输入“1”。如果条件不满足,我希望python什么也不做 测试数据集如下所示: data = [[12,10],[15,10],[8,5],[4,5],[15,'NA'],[5,'NA'],[10,10], [9,10]] df = pd.DataFrame(data, columns = ['Score', 'Benchmark']) Score Benchmark 0 12 10 1 15

我不知道如何比较两列,以及一列是否大于或等于另一个数字,请在新列中输入“1”。如果条件不满足,我希望python什么也不做

测试数据集如下所示:

data = [[12,10],[15,10],[8,5],[4,5],[15,'NA'],[5,'NA'],[10,10], [9,10]]
df = pd.DataFrame(data, columns = ['Score', 'Benchmark'])

   Score Benchmark
0     12        10
1     15        10
2      8         5
3      4         5
4     15        NA
5      5        NA
6     10        10
7      9        10
所需输出为:

desired_output_data = [[12,10, 1],[15,10,1],[8,5,1],[4,5],[15,'NA'],[5,'NA'],[10,10,1], [9,10]]
desired_output_df = pd.DataFrame(desired_output_data, columns = ['Score', 'Benchmark', 'MetBench'])

   Score Benchmark  MetBench
0     12        10       1.0
1     15        10       1.0
2      8         5       1.0
3      4         5       NaN
4     15        NA       NaN
5      5        NA       NaN
6     10        10       1.0
7      9        10       NaN
我试过这样做:

if df['Score'] >= df['Benchmark']:
    df['MetBench'] = 1
我对编程基本上是新手,所以任何指导都将不胜感激。
谢谢大家!

可以使用
ge
map

df.Score.ge(df.Benchmark).map({True: 1, False:np.nan})
或者隐式地使用从
False
np.nan
的映射,因为pandas使用
dict.get
方法应用映射,并且
None
是默认值(感谢
@piRSquared

或者干脆
系列。其中

df.Score.ge(df.Benchmark).where(lambda s: s)
两种输出

0    1.0
1    1.0
2    1.0
3    NaN
4    NaN
5    NaN
6    1.0
7    NaN
dtype: float64
一定要做

df['Benchmark'] = pd.to_numeric(df['Benchmark'], errors='coerce')

首先,由于您有
'NA'
作为字符串,但您需要数值
np.nan
才能将其与其他数字进行比较

使用:
df['MetBench']=np.where(df['Score']>=df['Benchmark'],1,np.nan)
df.Score.ge(df.Benchmark.map({True:1})
pandas使用map的方式是,它将字典转换为可调用的
dict.get
,当密钥不存在时返回
None
。@piRSquared Living and learning;}将添加
df['Benchmark'] = pd.to_numeric(df['Benchmark'], errors='coerce')