python - 按 Pandas GroupBy 中的列表列分组
问题描述
我有以下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
解决方案
您可以 tupleize 和 hash 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
推荐阅读
- pandas - 使用 pandas 和 seaborn 的二维密度图
- cordova - 我是否需要将插件标签保留在科尔多瓦的 config.xml 中?
- docker - 使用 docker Windows Nanoserver 删除文件时访问被拒绝
- javascript - 如何在 Vuetify 文本字段中上标标签
- python - 如果列不存在,则新列的熊猫数据透视表错误计算
- python - 通过按钮调用函数时出现 Tkinter 错误
- angular - 使用 Angular Elements 维护 Angular 项目的最佳实践
- python - 根据字典值中的单词对字符串进行排序
- python - SyntaxError(Python):异步函数外的“等待”
- postgresql - JSONB 列 postgresql 中的 QueryDsl