Groupby Pandas 并比较多列

时间:2021-07-09 13:37:46

标签: python pandas dataframe pandas-groupby

如果“value_pack”中的每个唯一条目与另一个 value_pack 具有相同的“value”和“discount”,则会发生重复

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”中的每个唯一条目进行分组,并将其与其他所有条目进行比较。 例如,Va1 1 和Val 2 相同。

df.groupby(['Value_pack]) 但我不知道从哪里开始。任何帮助将不胜感激谢谢

输出将是 Val 1, Val 2

1 个答案:

答案 0 :(得分:0)

您可以先创建一个临时 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 和 {{1 }}):

Val2 - Val1

输出:

(z
    .merge(z, on=['value', 'discount'])
    .drop(columns=['value', 'discount'])
    .query('Value_pack_x < Value_pack_y'))