как использовать group by в состоянии фильтра в пандах - PullRequest
0 голосов
/ 30 мая 2018

У меня есть данные ниже, хранящиеся в кадре данных, и я хочу удалить строки с идентификатором, равным finalid, и для того же идентификатора у меня есть несколько строк.

пример: df_target

id finalid month year count_ph count_sh
1   1      1     2012  12        20
1   2      1     2012   6         18
1   32     1     2012   6         2
2   2      1     2012   2         6
2   23     1     2012   2         6
3   3      1     2012   2         2

output

id finalid month year count_ph count_sh

    1   2    1     2012    6         18
    1   32   1     2012    6         2
    2   23   1     2012    2         6
    3   3    1     2012    2         2

Функциональность примерно такая: удалить записи и получить окончательный фрейм данных (df_target.groupby (['id', 'month', 'year']). Size ()> 1) & (df_target ['id'] == df_target ['finalid'])

1 Ответ

0 голосов
/ 30 мая 2018

Я думаю, нужно transform для тех же Series, что и для оригинала DataFrame и ~ для инвертированной конечной логической маски:

df = df_target[~((df_target.groupby(['id','month','year'])['id'].transform('size') > 1) & 
                 (df_target['id'] == df_target['finalid']))]

Альтернативное решение:

df = df_target[((df_target.groupby(['id','month','year'])['id'].transform('size') <= 1) | 
                 (df_target['id'] != df_target['finalid']))]

print (df)
   id  finalid  month  year  count_ph  count_sh
1   1        2      1  2012         6        18
2   1       32      1  2012         6         2
4   2       23      1  2012         2         6
5   3        3      1  2012         2         2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...