gpt4 book ai didi

python - 在 Pandas 中使用任意优先级进行聚合

转载 作者:行者123 更新时间:2023-12-03 20:03:41 25 4
gpt4 key购买 nike

给定数据框

  Column1 Column2  Column3
0 a foo 1
1 a bar 2
2 b baz 12
3 b foo 4
4 c bar 6
5 c foo 3
6 c baz 7
7 d foo 9
我想对 Column1 进行分组,使用任意优先顺序来保留 column3 中的值。
例如,如果优先顺序是:
  • baz
  • 酒吧
  • foo

  • 那么我希望输出显示为
             Column2
    Column1
    a 2
    b 12
    c 7
    d 9
    “a”组保持“bar”值,因为“a”组没有“baz”,“b”组保持“baz”值,依此类推。
    什么是最优雅的方式来做到这一点?现在我正在应用一系列 apply lambda 来处理每个项目,但感觉很草率。
    编辑:
    如果优先级跨越多个列怎么办?
    前任。
      Column1 Column2 Column3  Column4
    0 a foo john 1
    1 a bar jim 2
    2 b baz jack 12
    3 b foo jim 4
    4 c bar john 6
    5 c foo john 3
    6 c baz jack 7
    7 d foo jack 9
    如果 Column2 和 Column3 的优先顺序是:
  • 吉姆
  • baz
  • foo

  • 那么我希望输出显示为
            Column2  Column3
    Column1
    a jim 2
    b jim 4
    c baz 7
    d foo 9

    最佳答案

    如果您对“Column2”中的所有值都有一个订单,您可以使用 loc设置索引以强加您的自定义订单后,然后 drop_duplicates只保留最高优先级。

    order = ['baz', 'bar', 'foo']
    df.set_index('Column2').loc[order].drop_duplicates('Column1')

    Column1 Column3
    Column2
    baz b 12
    baz c 7
    bar a 2
    foo d 9

    在第二种情况下,如果您需要跨多个列执行此操作,我们首先 melt这样 Column2 和 Column3 被堆叠成一个长系列,其余的与上面相同:
    order = ['jim', 'baz', 'foo']
    (df.melt(id_vars=['Column4', 'Column1'], value_vars=['Column2', 'Column3'])
    .drop(columns='variable')
    .set_index('value')
    .loc[order]
    .drop_duplicates('Column1')
    )

    Column4 Column1
    value
    jim 2 a
    jim 4 b
    baz 7 c
    foo 9 d

    关于python - 在 Pandas 中使用任意优先级进行聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63960103/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com