【问题标题】:How can I split my normalization in two according to column values?如何根据列值将标准化一分为二?
【发布时间】:2019-08-07 01:05:36
【问题描述】:

您好,我在 pandas 中有一个列数据分布严重偏斜:

我根据截止值 1000 将数据一分为二,这是两组的分布。

现在,我想用 0-1 之间的值进行标准化。我想执行“差分”归一化,即左面板值在 0-0.5 之间归一化,右面板值在 0.5 到 1 之间归一化,所有内容都在同一列中。我该怎么做?

【问题讨论】:

  • 只是为了确定,因为拆分直方图是非常不寻常的:您是否有特定的理由采用这种方法,或者您只是想正确地可视化这个分布?如果您想要后者,请尝试将其绘制为对数 (plt.semilogy) 或双对数 (plt.loglog)
  • 这不是可视化,原因是我试图将其转换为图像,将其转换为 0-255 范围。我希望低值和高值对图像的贡献或多或少达到相同的程度。
  • 将单词放在引号中并不能神奇地阐明您没有写出的特殊含义。
  • @philipxy 好的,为其他人清除

标签: python-3.x pandas normalization distribution


【解决方案1】:

它不漂亮,但很有效。

df = pd.DataFrame({'dataExample': [0,1,2,1001,1002,1003]})

less1000 = df.loc[df['dataExample'] <= 1000]
df.loc[df['dataExample'] <= 1000, 'datanorm'] =  less1000['dataExample'] / (less1000['dataExample'].max() * 2)

high1000 = df.loc[df['dataExample'] > 1000]
df.loc[df['dataExample'] > 1000, 'datanorm'] =  ((high1000['dataExample'] - high1000['dataExample'].min()) / ((high1000['dataExample'].max() - high1000['dataExample'].min()) * 2) + 0.5)

output:
    dataExample datanorm
0   0   0.00
1   1   0.25
2   2   0.50
3   1001    0.50
4   1002    0.75
5   1003    1.00

【讨论】:

  • 谢谢,接近...标准化没问题,但我应该得到一列包含所有值,然后得到两列。我需要两个以 1000 为条件的规范,都在同一列中。
【解决方案2】:

假设您的数据框称为df,保存数据的列称为data,保存计数的列称为counts。然后你可以这样做:

df['data_norm'] = df['data'].loc[df['counts']<=1000] / 1000 / 2
df['data_norm'] = df['data'].loc[df['counts']>1000] / df['counts'].max() + 0.5

...假设我理解正确。但我想我既不能正确理解你的问题,也不能正确理解你的解决方法。

【讨论】:

    猜你喜欢
    • 2020-06-27
    • 2022-01-17
    • 2021-09-03
    • 1970-01-01
    • 2022-01-23
    • 2021-11-26
    • 2012-01-22
    • 2019-07-27
    • 1970-01-01
    相关资源
    最近更新 更多