Как добавить условия при расчете с использованием Python? - PullRequest
0 голосов
/ 26 сентября 2018

data У меня есть кадр данных с двумя числовыми столбцами.Я хочу добавить третий столбец, чтобы вычислить разницу.Но условие состоит в том, что если значения в первом столбце являются пустыми или Nan, разница должна быть значением во втором столбце ...

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

Любойпредложения и подсказки будут оценены!Спасибо.

Ответы [ 4 ]

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

Вы должны использовать векторизованные операции, где это возможно.Здесь вы можете использовать numpy.where:

df['Difference'] = np.where(df['July Sales'].isnull(), df['August Sales'],
                            df['August Sales'] - df['July Sales'])

Однако учтите, что это в точности то же самое, что считать значения NaN в df['July Sales'] равными нулю.Таким образом, вы можете использовать pd.Series.fillna:

df['Difference'] = df['August Sales'] - df['July Sales'].fillna(0)
0 голосов
/ 26 сентября 2018

попробуйте это:

def diff(row):
    if not row['col1']:
        return row['col2']
    else:
        return row['col1'] - row['col2']

df['col3']= df.apply(diff, axis=1)
0 голосов
/ 26 сентября 2018

Это на самом деле не ситуация с условиями, это просто математическая операция. Предположим, у вас есть df:

. Рассмотрите ваш df, используя метод .sub ():

df['Diff'] = df['August Sales'].sub(df['July Sales'], fill_value=0)

возвращает вывод:

   July Sales  August Sales   Diff
0       459.0           477   18.0
1       422.0           125 -297.0
2       348.0           483  135.0
3       397.0           271 -126.0
4         NaN           563  563.0
5       191.0           325  134.0
6       435.0           463   28.0
7         NaN           479  479.0
8       475.0           473   -2.0
9       284.0           496  212.0
0 голосов
/ 26 сентября 2018

Использовал примерный фрейм данных, но его не должно быть трудно понять:

df = pd.DataFrame({'A': [1, 2, np.nan, 3], 'B': [10, 20, 30, 40]})

def diff(row):
    return row['B'] if (pd.isnull(row['A'])) else (row['B'] - row['A'])

df['C'] = df.apply(diff, axis=1)

ОРИГИНАЛЬНЫЕ ДАННЫЕ КАДРЫ:

    A   B   
0   1.0 10  
1   2.0 20  
2   NaN 30  
3   3.0 40

ПОСЛЕ apply:

    A   B   C
0   1.0 10  9.0
1   2.0 20  18.0
2   NaN 30  30.0
3   3.0 40  37.0
...