python - 如何置换 Pandas 列的值?

标签 python pandas

我有以下 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/

相关文章:

python : communication with c++ command line program not working when using <cstdio>

python - pytorch 梯度/导数/沿轴的差异,如 numpy.diff

python - word2vec的余弦相似度大于1

python - 对 Pandas 中包含数字和分隔符的字符串进行排序

python - Pandas 数据框和多行值

python - 使用pandas,如何过滤两列中具有相似值的行

python - 使用 ffmpeg 动态更改视频裁剪宽度、高度、x 和 y

python - 未找到 Django 相关名称

python - Pandas 将数据框与共享列合并,左右填充

python - Pandas DataFrame 到嵌套 JSON 而不更改数据结构