如何根据 pandas 中另一列中的值进行升序和降序排序?

2024-02-10

我有一个带有一组值(价格)的 pandas 数据框。每组内initiator_id我需要对价格升序排序,如果type == sell,并且递减,如果type == buy。 然后我在每个组中添加一个 id。现在我这样做:

 df['bidnum'] = df.groupby(['initiator_id', 'type']).cumcount()

在每个组中升序排序的有效方法是什么'initiator_id', 'type == sell'并下降为'initiator_id', 'type == buy' ?

原始数据集现在如下所示:

initiator_id    price   type    bidnum
1       170.81  sell    0
2       170.81  sell    0
2       169.19  buy     0
3       170.81  sell    0
3       169.19  buy     0
3       70.81   sell    1
4       170.81  sell    0
4       169.19  buy     0
4       70.81   sell    1
4       69.19   buy     1

我需要类似的东西:

initiator_id, price, type
1, 100,sell
1, 99, sell
1, 98, sell
1, 110, buy
1, 120, buy
1, 125, buy

So that sell每个内的子组initiator_id组按降序排序,并且buy子组按升序排序。


如果你可以假设你的"price"列将始终包含非负值,我们可以“作弊”。为买入或卖出操作的价格分配负值,排序,然后计算绝对值以返回到原始价格:

  1. 如果类型是"buy",价格仍为正 (2 * 1 - 1 = 1)。如果类型是"sell",价格将变为负数 (2 * 0 - 1 = -1)。

    df["price"] = df["price"] * (2 * (df["type"] == "buy").astype(int) - 1)
    
  2. 现在正常对值进行排序。我已经包括了两个"initiator_id" and "type"列以匹配您的预期输出:

    df = df.sort_values(["initiator_id", "type", "price"])
    
  3. 最后计算绝对值"price"列来检索原始值:

    df["price"] = df["price"].abs()
    

此操作对示例输入的预期输出:

   initiator_id   price  type  bidnum
0             1  170.81  sell       0
2             2  169.19   buy       0
1             2  170.81  sell       0
4             3  169.19   buy       0
3             3  170.81  sell       0
5             3   70.81  sell       1
9             4   69.19   buy       1
7             4  169.19   buy       0
6             4  170.81  sell       0
8             4   70.81  sell       1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何根据 pandas 中另一列中的值进行升序和降序排序? 的相关文章

随机推荐