Группировка по столбцу списков в пандах GroupBy - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть следующие df,

pri_key          doc_no    c_code
[9001, 7620]     767       0090
[9001, 7620]     767       0090
[9002, 7530]     768       4100
[9002, 7530]     769       3000
[9003, 7730]     777       4000
[9003, 7730]     777       4000
[9003, 7730]     779       4912

Мне нужно хешировать pri_key, затем groupby хэширует pri_key и исключает группы, строки которых имеют одинаковую комбинацию doc_no и c_codeиз df;

 df["doc_group"] = df['pri_key'].apply(lambda ls: hash(tuple(sorted(ls))))

 grouped = df.groupby("doc_group")

 m = grouped[['doc_no', 'c_code']].apply(lambda x: len(np.unique(x.values)) > 1)

 df = df.loc[m]

но это не сработало,

pandas.core.indexing.IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match

Мне интересно, как это решить.Таким образом, результат будет выглядеть так:

pri_key          doc_no    c_code
[9002, 7530]     768       4100
[9002, 7530]     769       3000
[9003, 7730]     777       4000
[9003, 7730]     777       4000
[9003, 7730]     779       4912    

1 Ответ

0 голосов
/ 22 февраля 2019

Вы можете кортежировать и хешировать pri_key, а затем использовать его для группировки по df:

grouper = [hash(tuple(x)) for x in df['pri_key']]
df[df.groupby(grouper)[['doc_no', 'c_code']].transform('nunique').gt(1).all(1)]

        pri_key  doc_no  c_code
2  [9002, 7530]     768    4100
3  [9002, 7530]     769    3000
4  [9003, 7730]     777    4000
5  [9003, 7730]     777    4000
6  [9003, 7730]     779    4912
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...