#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