在计算的字段pandas上添加不正确的值

时间:2017-09-09 18:06:18

标签: python pandas numpy dataframe

我有一个功能,应该添加一个有利润的新列。

def profit(data):
    for index, row in data.iterrows():
        #print row[0]
        profir_margin_L_A = 0.04
        profir_margin_E = 0.02
        if row[2]== 'Latin America':
#       row['profit'] = data.apply(lambda row: row[8]* profir_margin_L_A)
            data['profit'] = data['amount_eur_y'] * profir_margin_L_A

        else:
#             row['profit'] = data.apply(lambda row: row[8]* profir_margin_E)
            data['profit'] = data['amount_eur_y'] * profir_margin_E
    return data

所有行返回0,02%,不仅仅是欧洲。

我也试过这个,但只适用于一个条件。

test['profit'] = (test['amount_eur_y']*profir_margin_L_A).where(test['region'] == 'Latin America')

计算我需要的东西,但是当我无法结合欧洲的条件时。

最后,我需要一个计算出正确利润的数据框。

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用numpy.where创建一个数组,该数组在profir_margin_L_Aregion == 'Latin America'之后等于profir_margin_E,然后将其与amount_eur_y列相乘:

test['profit'] = test['amount_eur_y'] * pd.np.where(test['region'] == 'Latin America', profir_margin_L_A, profir_margin_E)