首页 > 解决方案 > 如何在不超出由另一列中的值设置的间隔范围的情况下随机调整列的每个数组中的值

问题描述

我在熊猫数据框中有以下数据:

FileName    Onsets              Offsets
FileName1   [0, 270.78, 763.33] [188.56, 727.28, 1252.90]
FileName2   [0, 634.34, 1166.57, 1775.95, 2104.01]  [472.04, 1034.37, 1575.88, 1970.79, 2457.09]
FileName3   [0, 560.97, 1332.21, 1532.47]   [356.79, 1286.26, 1488.54, 2018.61]

这些是来自音频文件的数据。每行包含我正在研究的每种声音的一系列开始和偏移时间。这意味着数字是耦合的,例如第二个偏移时间标志着在第二个开始时间开始的声音的结束。

为了检验一个假设,我需要在各种范围内选择随机偏移时间。例如,我需要将每个偏移时间乘以 0.95 到 1.05,以在实际偏移时间周围 +/- 5% 的范围内创建随机调整。然后是 0.90 到 1.10,依此类推。

重要的是,调整不需要将偏移时间推早或晚于之前或之后的开始时间。我认为这意味着我需要首先计算每个偏移时间的最大可接受调整,然后将整个数据集的最大允许时间设置为最低可接受调整。我将把这段代码用于不同的数据集,所以这个最大调整百分比不应该是硬编码的。

我该如何编写这个函数?

下面的代码会生成调整,但我还没有想出计算和设置边界。

import random

Offsets_5 = Offsets*(random.uniform(0.95,1.05))
Offsets_10 = Offsets*(random.uniform(0.90,1.10))
Offsets_15 = Offsets*(random.uniform(0.85,1.15))

标签: pythonpandasrandom

解决方案


推荐阅读