python - Groupby Pandas 并比较多列
问题描述
如果“value_pack”中的每个唯一条目与另一个 value_pack 具有相同的“值”和“折扣”,则会发生重复
Value_pack value discount
Val 1 ADA 0
Val 1 ADB 100
Val 2 ADA 0
Val 2 ADB 100
Val 3 ADA 50
Val 3 ADB 40
Val 4 ADA 40
我想对“value_pack”中的每个唯一条目进行分组,并将其与其他所有条目进行比较。例如,Val 1 和 Val 2 是相同的。
df.groupby(['Value_pack]) 但我不确定从这里去哪里。任何帮助将不胜感激谢谢
输出将是 Val 1, Val 2
解决方案
您可以首先制作一个临时 DataFrame z
,其中每一行是一个值包,每一列是所有值的元组:
z = (df
.sort_values(['value', 'discount'])
.groupby('Value_pack', as_index=False)
.agg(tuple))
因此,在我们的示例z
中是:
Value_pack value discount
0 Val 1 (ADA, ADB) (0, 100)
1 Val 2 (ADA, ADB) (0, 100)
2 Val 3 (ADA, ADB) (50, 40)
3 Val 4 (ADA,) (40,)
然后在 上合并z
到自身['value', 'discount']
,并在哪里记录Value_pack_x < Value_pack_y
(因为它是对称的,你不想拥有Val1 - Val2
and Val2 - Val1
):
(z
.merge(z, on=['value', 'discount'])
.drop(columns=['value', 'discount'])
.query('Value_pack_x < Value_pack_y'))
输出:
Value_pack_x Value_pack_y
1 Val 1 Val 2
推荐阅读
- firebase - Does Firestore charge Cloud Function Get reads per retrieved documents?
- javascript - 初始化空的 JQuery 数据表并向其添加项目
- php - 如何调试和记录 PHP OPcache 问题
- angular - How to verify ngCopy method call in angular 6 unit test
- sorting - Yii2 过滤具有多重关系的数据
- sql - 错误:列“bob”不存在第 1 行:SELECT * FROM tag WHERE field1=Bob
- python-3.x - How to convert following date time format
- python - FutureWarning:不推荐使用非元组序列进行多维索引,使用 `arr[tuple(seq)]` 而不是 `arr[seq]`
- c# - Windows 服务错误:进程意外终止
- session - 如何跟踪在浏览器中登录 Gmail 的电子邮件地址?