группировка по количеству, году и отображению последнего вхождения и его количества - PullRequest
0 голосов
/ 23 сентября 2018

В следующем фрейме данных

d = {'year': [2001, 2002, 2005, 2002, 2004, 1999, 1890],
     'tin': [12, 23, 24, 28,30, 12,7],
     'ptin': [12, 23, 28, 22, 12, 12,0] }

df = pd.DataFrame(data=d)

Если я запускаю следующий код:

df = (df.groupby(['ptin', 'tin', 'year'])
                  .apply(lambda x : x['tin'].isin(x['ptin']).astype(int).sum())
                  .reset_index(name='matches'))
df

Я получаю следующий результат

    ptin    tin   year   matches
0   12      3.0   1999   0
1   12      3.0   2001   0
2   22      1.0   2002   0
3   23      1.0   2002   0

Это дает мне подходящее оловоПтин и групп по годам.

Теперь, если я хочу найти последнее вхождение, скажем, например, tin == 12, я должен получить 2001. Я хочу добавить этот столбец, а также разницу между 1999 и 2001, то есть два в другом столбце,так, что мой ответ выглядит следующим образом

    ptin    tin   year   matches    lastoccurence   length 
0   12      3.0   1999   0            0               0
1   12      3.0   2001   0            2001            2
2   22      1.0   2002   0            2002            1
3   23      1.0   2002   0            2002            1

Любая помощь будет оценена.Я мог бы принять решение в пандах или SQL, если это возможно.

1 Ответ

0 голосов
/ 24 сентября 2018

Я думаю, что это сделает магию (хотя бы частично?):

df['duration'] = df.sort_values(['ptin','year']).groupby('ptin')['year'].diff()
df = df.dropna(subset=['duration'])
print (df)

     ptin  tin  year  matches  duration
2    12    12  2001        1       2.0
3    12    30  2004        0       3.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...