операция условного сдвига в Пандах - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть df как

print (df)
   ACTUAL  TARGET ACTUAL_DATE  NO  YEAR
0    6385  108725    9/5/2018  36  2018
1    6385  108725    9/4/2018  36  2018
2    3251  108725    9/3/2018  36  2018
3    1793  120941    9/2/2018  35  2018
4    1037  120941    9/1/2018  35  2018
5  121127  120941   8/31/2018  35  2018
6  116232  120941   8/30/2018  35  2018
7  111820  120941   8/29/2018  35  2018
8  106402  120941   8/28/2018  35  2018

, и я ищу вывод типа

enter image description here

Обратите внимание на новый столбец ACTUAL_SALESэто разница ACTUAL - ACTUAL (Previous)

Я пытался использовать,

if a['ACTUAL_DATE'].dt.month == a['ACTUAL_DATE'].shift(1).dt.month:
    a['ACTUAL_SALES'] = a['ACTUAL'] - a['ACTUAL'].shift(-1)   
else:
    a['ACTUAL_SALES'] = a['ACTUAL']

ValueError: Истинное значение Series является неоднозначным.Используйте a.empty, a.bool (), a.item (), a.any () или a.all ().

Я также пробовал,

 if a['ACTUAL_DATE'].dt.month == a['ACTUAL_DATE'].shift(1).dt.month:
    a['ACTUAL_SALES'] = a['ACTUAL'].diff(-1)  
 else:
    a['ACTUAL_SALES'] = a['ACTUAL']

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

1 Ответ

0 голосов
/ 07 декабря 2018

Я думаю, вам нужно groupby по месяцам, что работает, если несколько лет с diff и заменить последние значения каждого месяца на исходный столбец на fillna, последний столбец преобразования в целое число:

df['ACTUAL_DATE'] = pd.to_datetime(df['ACTUAL_DATE'], format='%m/%d/%Y')

df['ACTUAL_SALES'] = (df.groupby(df['ACTUAL_DATE'].dt.to_period('m'))['ACTUAL']
                        .diff(-1)
                        .fillna(df['ACTUAL'])
                        .astype(int))
print (df)
   ACTUAL  TARGET ACTUAL_DATE  NO  YEAR  ACTUAL_SALES
0    6385  108725  2018-09-05  36  2018             0
1    6385  108725  2018-09-04  36  2018          3134
2    3251  108725  2018-09-03  36  2018          1458
3    1793  120941  2018-09-02  35  2018           756
4    1037  120941  2018-09-01  35  2018          1037
5  121127  120941  2018-08-31  35  2018          4895
6  116232  120941  2018-08-30  35  2018          4412
7  111820  120941  2018-08-29  35  2018          5418
8  106402  120941  2018-08-28  35  2018        106402
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...