groupbyPandas和比较多个列

6vl6ewon  于 2021-09-08  发布在  Java
关注(0)|答案(1)|浏览(194)

如果“价值包”中的每个唯一条目与另一个价值包具有相同的“价值”和“折扣”,则会发生重复

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

我想按“价值包”中的每个唯一条目分组,并将其与其他条目进行比较。例如,va1 1和val 2是相同的。
groupby(['value\u pack]),但我不确定从这里走到哪里。任何帮助都将不胜感激,谢谢
输出值为val 1,val 2

atmip9wb

atmip9wb1#

您可以首先创建一个临时 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 - Val2Val2 - 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

相关问题