Моя цель сегодня - следить за каждым идентификатором, который принадлежит Category==1
на определенную дату, год спустя. Поэтому у меня есть такой фрейм данных:
Period ID Amount Category
20130101 1 100 1
20130101 2 150 1
20130101 3 100 1
20130201 1 90 1
20130201 2 140 1
20130201 3 95 1
20130201 5 250 0
. . .
20140101 1 40 1
20140101 2 70 1
20140101 5 160 0
20140201 1 35 1
20140201 2 65 1
20140201 5 150 0
Например, в 20130201
у меня есть 2 идентификатора, которые принадлежат Category
1: 1,2,3, но только 2 из них присутствуют в20140201
: 1,2. Поэтому мне нужно получить значение Amount
, только для этих идентификаторов, через год, например:
Period ID Amount Category Amount_t1
20130101 1 100 1 40
20130101 2 150 1 70
20130101 3 100 1 nan
20130201 1 90 1 35
20130201 2 140 1 65
20130201 3 95 1 nan
20130201 5 250 0 nan
. . .
20140101 1 40 1 nan
20140101 2 70 1 nan
20140101 5 160 0 nan
20140201 1 35 1 nan
20140201 2 65 1 nan
20140201 5 150 0 nan
Итак, если идентификатор не появится в следующем году или будет принадлежать Category
0, я получу nan
. Мой первый подход состоял в том, чтобы получить список уникальных идентификаторов для каждого Period
, а затем попытаться сопоставить его со следующим годом, используя некую комбинацию groupby()
и isin()
, например:
aux = df[df.Category==1].groupby('Period').ID.unique()
aux.index = aux.index + pd.DateOffset(years=1)
Но я не знал, как продолжать идти. Я думаю, что какой-то groupby('ID')
может быть более эффективным. Если бы это был простой shift()
, это было бы легко, но я не уверен, как получить смещение значения на год по группе.