Новый столбец данных «количество» для каждого идентификатора и меньше, чем дата - PullRequest
1 голос
/ 08 ноября 2019

Я хочу добавить новый столбец с именем count, который считает нет. записей на ID меньше, чем дата. Вот так выглядит мой фрейм данных

    date    ID     count
20191101 &nbsp; &nbsp;1 &nbsp; &nbsp; &nbsp; 1<br>
20191102 &nbsp; &nbsp;2 &nbsp; &nbsp; &nbsp; 0<br>
20191030 &nbsp; &nbsp;1 &nbsp; &nbsp; &nbsp; 0<br>
20191103 &nbsp; &nbsp;2 &nbsp; &nbsp; &nbsp; 1<br>
20191105 &nbsp; &nbsp;2 &nbsp; &nbsp; &nbsp; 2<br>
20191030 &nbsp; &nbsp;1 &nbsp; &nbsp; &nbsp; 0<br>

Мой фрейм данных имеет 15 столбцов и 90 тыс. Строк

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

Примерно так:

import pandas as pd
df =  df.sort_values(by=['ID','date'])
df['count'] = 1
df['cumsum'] = df.groupby('ID')['count'].transform('cumsum')
df['final'] = df['cumsum'] - 1 

       date  ID  count  cumsum  final
2  20191030   1      1       1      0
5  20191030   1      1       2      1
0  20191101   1      1       3      2
1  20191102   2      1       1      0
3  20191103   2      1       2      1
4  20191105   2      1       3      2

final - это нужный вам столбец, остальные - просто вспомогательные столбцы, которые можно отбросить

0 голосов
/ 08 ноября 2019

IIUC, сортировка и cumum - это то, что вам нужно

df = df.sort_values(by='date')
df1 = df.groupby(['ID', 'date'], as_index=False)['count'].sum()
df1['cumulative_count'] = df1.groupby('ID', as_index=False)['count'].cumsum()
df1
    ID  date    count   cumulative_count
0   1   20191030    0   0
1   1   20191101    1   1
2   2   20191102    0   0
3   2   20191103    1   1
4   2   20191105    2   3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...