我有以下 DataFrame df
:
Datetime Supply Price
2019-02-01 12:00 10 2.0
2019-02-01 12:00 10 1.0
2019-02-01 12:00 0 5.0
2019-02-01 12:00 10 1.0
2019-02-01 12:00 0 2.0
2019-02-01 12:00 10 4.0
2019-02-01 12:00 0 5.0
Supply
的总和是 40。我需要置换 Suppy
10 以便将它们分配给更高的 Price
值,而 Supply
0 应该出现在 Price
的较低值处。
这是预期的结果:
Datetime Supply Price
2019-02-01 12:00 10 2.0
2019-02-01 12:00 0 1.0
2019-02-01 12:00 10 5.0
2019-02-01 12:00 0 1.0
2019-02-01 12:00 0 2.0
2019-02-01 12:00 10 4.0
2019-02-01 12:00 10 5.0
有什么线索吗?
最佳答案
参数排序
- 乘以负数作为切换排序的便捷方式
- 使用
argsort
来跟踪我的值的放置位置 - 创建
b
来存放我的置换值 - 使用
Supply
的排序版本填充b
- 分配回
df
a = df.Price.mul(-1).to_numpy().argsort()
b = np.empty_like(df.Supply)
b[a] = df.Supply.sort_values(ascending=False)
df.loc[:, 'Supply'] = b
df
Datetime Supply Price
0 2019-02-01 12:00 10 2.0
1 2019-02-01 12:00 0 1.0
2 2019-02-01 12:00 10 5.0
3 2019-02-01 12:00 0 1.0
4 2019-02-01 12:00 0 2.0
5 2019-02-01 12:00 10 4.0
6 2019-02-01 12:00 10 5.0
这段代码还有优化的空间,但总体思路就在那里。
关于python - 如何置换 Pandas 列的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56604401/