我有以下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
进行散列,然后对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
答案 0 :(得分:1)
您可以对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