(Python) Как я могу узнать, есть ли другие равные значения противоположного знака?

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

У меня есть фрейм данных в python, похожий на тот, что на картинке, и мне было интересно, как я могу получить тот же результат. Итак, если у меня есть определенное значение, и в этой строке существует другое значение противоположного знака (например, -360 и 360), которое имеет ту же дату (точнее, тот же месяц), тогда я должен создать новую переменную, которая выводит ‘ / — тот же месяц’. Аналогично, если значения относятся к разным месяцам, то » /- другой месяц». Если противоположного значения нет, мне просто нужно напечатать, является ли значение положительным или отрицательным. Я пытался сделать это с помощью 2 циклов for, но я потерпел неудачу, и у меня нет идей.

Пример желаемого результата

Ответ №1:

Нужно спешить, я добавлю описание вечером

 import pandas as pd
import numpy as np

pd.set_option('display.max_columns', None)

test_data = [
                {'Title': "Account1", 'Amount': 100, 'Date': '2019-11-13'},
                {'Title': "Account1", 'Amount': -100, 'Date': '2019-11-17'},
                {'Title': "Account2", 'Amount': 200, 'Date': '2019-11-14'},
                {'Title': "Account2", 'Amount': -200, 'Date': '2019-12-14'},
                {'Title': "Account3", 'Amount': 300, 'Date': '2020-01-01'}
            ]

test_data = pd.DataFrame(test_data)
test_data['Month'] = test_data['Date'].apply(lambda x: x[:-3])

positiv_amount = test_data[test_data['Amount'] > 0]
negative_amout = test_data[test_data['Amount'] < 0]

compare = pd.merge(how='left',
         left= positiv_amount, 
         right=negative_amout, 
         left_on='Title', right_on='Title',suffixes=['_positive', '_negative'])




conditions = [
    (compare['Amount_negative'].isnull()),
    (compare['Month_positive'] == compare['Month_negative']),
    (compare['Month_positive'] != compare['Month_negative'])]

choices = ['', 'Same Month', 'Different Month']

compare['output'] = np.select(conditions, choices)

print(compare)`
 
       Title  Amount_positive Date_positive Month_positive  Amount_negative    Date_negative Month_negative      output
0  Account1              100    2019-11-13        2019-11           -100.0     2019-11-17        2019-11  Same Month  
1  Account2              200    2019-11-14        2019-11           -200.0     2019-12-14        2019-12  Different Month  
2  Account3              300    2020-01-01        2020-01            NaN            NaN            NaN