我无法弄清楚如何比较两列,并且如果一列大于或等于另一个数字,请在新列中输入“ 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
我一般对编程都不熟悉,所以任何指导都将不胜感激。 谢谢!
答案 0 :(得分:2)
可以使用ge
和map
df.Score.ge(df.Benchmark).map({True: 1, False:np.nan})
或隐式使用从False
到np.nan
的映射,因为熊猫使用dict.get
方法来应用映射,并且None
是默认值(感谢{{ 1}})
@piRSquared
或者只是df.Score.ge(df.Benchmark).map({True: 1})
series.where
两个输出
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'
才能将其与其他数字进行比较