Подсчет идентификаторов на основе появления и последовательного порядка Pandas - PullRequest
0 голосов
/ 16 июня 2020

Текущий набор данных:

month  ID     Bool
1      333    0
2      444    0
3      111    0
4      222    0
5      999    0
6      111    1
7      111    1
8      111    1
9      222    1
10     555    1
11     666    1
12     777    1

В одном столбце с именем level должны быть определены две вещи:

  1. Подсчет общего числа происходящих ID с помощью Bool 1 и добавление в новый столбец с тот же ID Bool 0
  2. Для каждого Bool 1 подсчитать ID, которые находятся ниже, на основе месяца. Когда это последний, отображается 0.

Требуемый результат - новый столбец с именем level:

month  ID     Bool   Level
1      333    0      0
2      444    0      0
3      111    0      4
4      222    0      1
5      999    0      0
6      111    1      3
7      111    1      2
8      111    1      1
9      222    1      0
10     555    1      0
11     111    1      0
12     777    1      0

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Вот возможное решение

for index, row in df.iterrows():
  remainder = df.iloc[index:,:][(df['ID'] == row['ID']) & (df['Bool']==1)]
  df.loc[index, 'Level'] = remainder.shape[0]

Это решение выполняет итерацию по всем строкам и при этом просматривает оставшиеся df (df.iloc[index:,:]) и подсчитывает, сколько вхождений текущего идентификатора строки с встречается значение 1 типа Bool.

Надеюсь, это поможет! :)

1 голос
/ 17 июня 2020

Вы можете сделать cumcount с reversed заказ

df['level']=df.iloc[::-1].groupby('ID').cumcount()
df
Out[66]: 
    month   ID  Bool  Level  level
0       1  333     0      0      0
1       2  444     0      0      0
2       3  111     0      4      4
3       4  222     0      1      1
4       5  999     0      0      0
5       6  111     1      3      3
6       7  111     1      2      2
7       8  111     1      1      1
8       9  222     1      0      0
9      10  555     1      0      0
10     11  111     1      0      0
11     12  777     1      0      0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...