Примените условие «if», чтобы сравнить два столбца панд и сформировать третий столбец со значением второго столбца. - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть два столбца в кадре данных pandas, и я хочу сравнить их значения друг с другом и вернуть третий столбец, обрабатывающий простую формулу.

if post_df['pos'] == 1:

    if post_df['lastPrice'] < post_df['exp']:
        post_df['profP'] = post_df['lastPrice'] - post_df['ltP']
        post_df['pos'] = 0
    else:
        post_df['profP'] = post_df['lastPrice'] - post_df['ltP']

Однако, когда я запускаю приведенный выше код, я получаю следующееошибка:

    if post_df['pos'] == 1:
File "/Users/srikanthiyer/Environments/emacs/lib/python3.7/site-packages/pandas/core/generic.py", line 1479, in __nonzero__
    .format(self.__class__.__name__))
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

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

1 Ответ

0 голосов
/ 26 февраля 2019

Я бы попробовал что-то вроде этого:

def calculate_profp(row):
    profP = None
    if row['pos'] == 1:
        if row['lastPrice'] < row['exp']:
            profP = row['lastPrice'] - row['ltP']
        else:
            profP = row['lastPrice'] - row['ltP']
    return profP

post_df['profP'] = post_df.apply(calculate_profp, axis=1)

Что вы хотите сделать со строками, где row['pos'] не 1?

, после этого вы можете запустить:

post_df['pos'] = post_df.apply(
    lambda row: 0 if row['pos'] == 1 and row['lastPrice'] < row['exp'] else row['pos'],
    axis=1)

для установки pos с 1 на 0

или:

post_df['pos'] = post_df['pos'].map(lambda pos: 0 if pos == 1 else pos)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...