Группировать по и предоставлять группы, только если они уникальны в группе - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть следующий набор данных:

     Amount     Document Number
0     200           12345
1      90            2222
2     200          456789
3      90            4444
4     300            4789
5     300            4789

Так что в основном я хочу получить номера групп для вышеуказанных данных (возможно, с помощью ngroup)

Группировка данных на основе суммы. назначить номер группы одной группе, только если номера документов в этой группе имеют уникальные номера. Это то, что я хотел бы получить результат.

     Amount    Document Number  Group
0     200           12345          1
1      90            2222          2
2     200          456789          1
3      90            4444          2
4     300            4789            
5     300            4789

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

В pandas вы можете сначала создать маску, в которой любая группа по количеству имеет дуплекс, помеченный как False с groupby.transform и duplicated, затем используйте эту маску и groupby.ngroup, например:

mask_dup = ~(df.duplicated().groupby(df['Amount']).transform(any))
df.loc[mask_dup, 'Group'] = df[mask_dup].groupby('Amount').ngroup()+1
print (df)
   Amount  Document Number  Group
0     200            12345    2.0
1      90             2222    1.0
2     200           456789    2.0
3      90             4444    1.0
4     300             4789    NaN
5     300             4789    NaN

, если сначала у вас больше двух столбцов, вам нужно указать подмножество в duplicated

0 голосов
/ 22 апреля 2020

Группировка данных на основе суммы. присвойте строки одной группе, только если номер документа является уникальным номером.

Я думаю Вы хотите rank():

select t.*, rank() over (order by amount, document_number) as grouping
from t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...