как вычесть один столбец другим, за исключением флага в пандах - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть следующий фрейм данных в пандах

   code    time_diff    diff_flag       quantity
   123     0            zero            0.45
   124     5            less than 6     0.80
   125     8            no issue        0.78
   126     18           no issue        2.78
   127     28           no issue        4.78

Я хочу вычесть 6 из каждой строки в количестве, кроме diff_flag ноль и меньше 6. Мой желаемый фрейм данных будет

   code    time_diff    diff_flag       quantity     new_diff
   123     0            zero            0.45         Data Error 
   124     5            less than 6     0.80         Data Error
   125     8            no issue        0.78         2
   126     18           no issue        2.78         12 
   127     28           no issue        4.78         22

Как я могу сделать это в пандах?

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Почему бы и нет:

df['new_diff']=(df['time_diff']-6).clip(lower='Data Error')
0 голосов
/ 26 ноября 2018

Использование numpy.where:

m = df['diff_flag'].isin(['zero','less than 6'])
df['new_diff'] = np.where(m, 'Data Error', df['time_diff'] - 6)

Или:

m1 = df['time_diff'] == 0
m2 = df['time_diff'] < 6
df['new_diff'] = np.where(m1 | m2, 'Data Error', df['time_diff'] - 6)

Или:

m = df['diff_flag'] == 'no issue'
df['new_diff'] = np.where(m, df['time_diff'] - 6, 'Data Error')

print (df)
   code  time_diff    diff_flag  quantity    new_diff
0   123          0         zero      0.45  Data Error
1   124          5  less than 6      0.80  Data Error
2   125          8     no issue      0.78           2
3   126         18     no issue      2.78          12
4   127         28     no issue      4.78          22
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...