首页 > 解决方案 > 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

标签: pythonpandasdataframepandas-groupby

解决方案


您可以首先制作一个临时 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 - Val2and 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

推荐阅读