Создавайте специальные фильтры с пандами - PullRequest
0 голосов
/ 14 января 2019

У меня следующий результат после применения некоторых фильтров.

[2 rows x 10 columns]
          id  ID_ENTIDADE                        ENTIDADE     CHAMADO     ...                 DATA_ALT VALOR_OLD           VALOR_NEW  PRIORIDADE
406  5562613          198  Professional Services > Ser...  2018015615     ...      2018-12-27 16:52:03       NaN  N1 - Security (25)           0
403  5562603          198  Professional Services > Ser...  2018015615     ...      2018-12-27 16:51:08       NaN  Contrato 629 (284)           0
405  5562606          198  Professional Services > Ser...  2018015615     ...      2018-12-27 16:51:08       3.0                   1           3
404  5562604          198  Professional Services > Ser...  2018015615     ...      2018-12-27 16:51:08       1.0                   2          14
402  5561744          198  Professional Services > Ser...  2018015615     ...      2018-12-27 16:35:06       NaN             N1 (20)           0

[5 rows x 10 columns]
          id  ID_ENTIDADE                        ENTIDADE     CHAMADO     ...                 DATA_ALT VALOR_OLD           VALOR_NEW  PRIORIDADE
408  5563214          111  Professional Services > Sup...  2018015616     ...      2018-12-27 17:02:33       NaN             N1 (20)           0
407  5563124          111  Professional Services > Sup...  2018015616     ...      2018-12-27 17:02:04       NaN  Contrato 521 (142)           0

[2 rows x 10 columns]
          id  ID_ENTIDADE                        ENTIDADE     CHAMADO     ...                 DATA_ALT VALOR_OLD           VALOR_NEW  PRIORIDADE
413  5565821          198  Professional Services > Ser...  2018015617     ...      2018-12-27 17:51:28       NaN  N1 - Security (25)           0
412  5565813          198  Professional Services > Ser...  2018015617     ...      2018-12-27 17:50:43       3.0                   1           3
411  5565809          198  Professional Services > Ser...  2018015617     ...      2018-12-27 17:50:43       1.0                   2          14
410  5565808          198  Professional Services > Ser...  2018015617     ...      2018-12-27 17:50:43       NaN  Contrato 629 (284)           0
409  5565651          198  Professional Services > Ser...  2018015617     ...      2018-12-27 17:48:01       NaN             N1 (20)           0

Мой код

df = pd.read_csv("csv.csv", sep="\t")
df2 = df.sort_values(['CHAMADO', 'id'])
g1 = df2.sort_values(['DATA_ALT'], ascending=False)
#g1 = data.groupby(['CHAMADO', 'id'])

ret_group = g1.groupby(['CHAMADO'])

for table, group in ret_group:
    print(group)

Я уже создал фильтр, который группирует элементы по столбцу «CHAMADO» и сортирует их по возрастанию и наименьшему согласно столбцу идентификатора.

Теперь мне нужно отфильтровать первые 3 элемента в каждой группе и проверить, есть ли значения 3 или 14 в столбце «PRIORIDADE»

Но я не нахожу ничего, что могло бы мне помочь, или моя логика неверна.

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Теперь мне нужно отфильтровать первые 3 элемента в каждой группе и проверить если в столбце «PRIORIDADE» есть значения 3 или 14

groupby объектов дают итерацию из (key, dataframe) объектов. Таким образом, вы можете выполнить итерацию ret_group и выполнить свои проверки:

for key, group in ret_group:
    test1 = group['PRIORIDADE'].eq(3).any()   # check if 3 in series
    test2 = group['PRIORIDADE'].eq(14).any()  # check if 14 in series
    tests_satisfied = test1 & test2           # check if both criteria are satisfied
    print(key, tests_satisfied)
0 голосов
/ 14 января 2019

Попробуйте сделать:

ret_group = g1.groupby(['CHAMADO'])
filter_group = ret_group [ret_group['PRIORIDADE'] == 3]

Если это работает, то вы можете сделать:

filter_group = ret_group [(ret_group['PRIORIDADE'] == 3) & (ret_group['PRIORIDADE'] == 14) ]

Или вы можете сделать:

df_filtered = g1.groupby(['CHAMADO'])['PRIORIDADE']
df_filtered = df_filtered.to_frame()
df_prioridade3 = df_filtered[df_filtered['PRIORIDADE'] == 3]
df_prioridade14 = df_filtered[df_filtered['PRIORIDADE'] == 14]

А затем проверьте, не являются ли df_prioridade3 и df_prioridade14 пустыми

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...