比较两列,如果满足条件,则在新列中添加“ 1”

时间:2019-05-13 17:22:59

标签: 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        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

我一般对编程都不熟悉,所以任何指导都将不胜感激。 谢谢!

1 个答案:

答案 0 :(得分:2)

可以使用gemap

df.Score.ge(df.Benchmark).map({True: 1, False:np.nan})

或隐式使用从Falsenp.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'才能将其与其他数字进行比较