【发布时间】:2022-01-11 21:11:41
【问题描述】:
如何重新分配标准化数据帧的权重并设置上限。
例如,如果我有以下一行数据:
0.1 0.3 0.5 0.1
我不希望任何大于 0.4 的权重。如何裁剪 0.5 权重并重新分配权重,以便最大化每个条目。所以我会得到:
0.1 0.4 0.4 0.1
因此,将 0.5 裁剪为 0.4,将剩余的 0.1 添加到 0.3 得到 0.4。 请注意,在这两种情况下,条目总和为 1(标准化)。
这可以通过python来完成吗?即没有循环。
理想情况下,我希望将其应用于这样的数据框:
df = pd.DataFrame({'a': [5003, 54.06, 53.654, 55.2], 'b': [np.nan, 54.1121, 53.98, 55.12], 'c': [np.nan, 2, 53.322, 54.99],
'd': [np.nan, 53.1, 53.212, 55.002], 'e': [np.nan, 53, 53.2, 55.021], 'f': [np.nan, 53.11, 53.120, 55.3]})
N = 5 # 1/np.sqrt(N) = 0.447214
df = df.div(df.sum(axis=1), axis=0)
df:
a b c d e f
0 1.000000 NaN NaN NaN NaN NaN
1 0.200681 0.200875 0.007424 0.197118 0.196747 0.197155
2 0.167413 0.168431 0.166378 0.166034 0.165997 0.165747
3 0.166952 0.166711 0.166317 0.166354 0.166411 0.167255
谢谢。
【问题讨论】:
-
我不知道如何回答这个问题,但我想更好地理解问题参数。在您的示例中,为什么将 0.1 分配给第二个条目?在更大数组的更一般情况下应该如何决定?
-
它应该按降序分配,以便您最大化每个条目。另一个例子是,如果我们有这一行: 0.01 0.5 0.45 0.04 那么 0.5 将被剪裁为 0.4,0.45 将被剪裁为 0.4,剩下的 0.15 将分配如下: 0.15 到 0.04(因为它是下一个最大的数字),我们会得到:0.01 0.4 0.4 0.19
标签: python pandas dataframe normalization clip