Функция смещения с использованием оператора If else - PullRequest
1 голос
/ 01 октября 2019

У меня есть pd df, и я хочу создать третий столбец "LCC_saving" на основе следующих условий.

nvals=df['Offset_base']

for i, row in df.iterrows():

if nvals <0:
   df.at[i,'LCC_savings']=df.loc[i+row['Offset_base']]['LCC']-row['LCC']
else:
    df.at[i,'LCC_savings'] = 0

df

     Offset_base     LCC    LCC_saving 
0      1             $240       $0
1      0             $239       $0
2     -1             $244     $239-$244=-$4.77

Я получил следующее сообщение об ошибке: Значение истинности Series неоднозначно. Используйте a.empty, a.bool (), a.item (), a.any () или a.all ().

Может кто-нибудь помочь с кодом?

1 Ответ

1 голос
/ 02 октября 2019

Хотя такого рода проблемы могут быть решены с помощью iterrows и iat или, возможно, даже с некоторыми операциями, подразумевающими смещение, я думаю, что самый простой, быстрый и простой способ - это выполнить вычисления в базовом массиве numpy и назначитьрезультат для кадра данных:

import pandas as pd, numpy as np

df = pd.DataFrame({'Offset_base': [1,0,-1], 'LCC': [240,239,244]})

a = df.to_numpy()
LCC_savings = np.zeros(len(df))
for i in range(len(df)):
    if a[i,0] < 0:
        LCC_savings[i] = a[i+a[i,0],1] - a[i,1]
df['LCC_savings'] = LCC_savings

Результат:

   Offset_base  LCC  LCC_savings
0            1  240          0.0
1            0  239          0.0
2           -1  244         -5.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...