2016-07-28 5 views
1

Я пытаюсь добавить один столбец в dataframe df2, который содержит значение 0 if(df2['P_ACT_KW'] - df2['P_SOUSCR']) < 0 else df2['P_ACT_KW']- df2['P_SOUSCR'].добавить один столбец (вычитание) в dataframe с помощью python

if (df2['P_ACT_KW'] - df2['P_SOUSCR']) <0: 
    df2['depassement']=0 
else: 
    df2['depassement']= (df2['P_ACT_KW'] - df2['P_SOUSCR']) 

Я получил сообщение об ошибке:

ValueError Traceback (most recent call last) in() ----> 1 if (df2['P_ACT_KW'] - df2['P_SOUSCR']) <0: 2 df2['depassement']=0 3 else: 4 df2['depassement']= (df2['P_ACT_KW'] - df2['P_SOUSCR'])

C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\core\generic.py in nonzero(self) 890 raise ValueError("The truth value of a {0} is ambiguous. " 891 "Use a.empty, a.bool(), a.item(), a.any() or a.all()." --> 892 .format(self.class.name)) 893 894 bool = nonzero

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Любая идея пожалуйста?

Спасибо

ответ

1

IIUC:

df2['depassement'] = df2['P_ACT_KW'] - df2['P_SOUSCR'] 
df2[df2['depassement'] < 0, 'depassement'] = 0 

Это должно также работать:

df2['depassement'] = df2.P_ACT_KW.sub(df2.P_SOUSCR).apply(lambda x: max(x, 0)) 
0

Вам нужно сделать:

df2['depassement'] = np.where((df2['P_ACT_KW'] - df2['P_SOUSCR']) < 0), 0, df2['P_ACT_KW'] - df2['P_SOUSCR']) 

if не понимает, как сравнить массив, как структуры, следовательно, ошибка, здесь мы можем использовать np.where сравнить все строки для создания маски и где условие истинно набор для 0 еще выполнить вычитание