Python 比较两列,如果满足条件,则添加';1';新专栏
我不知道如何比较两列,以及一列是否大于或等于另一个数字,请在新列中输入“1”。如果条件不满足,我希望python什么也不做 测试数据集如下所示: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
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')