如何根据列值将规范化一分为二?

时间:2019-03-15 22:11:32

标签: python-3.x pandas normalization distribution

嗨,我在熊猫中有一个列数据,其分布严重偏斜: data distribution

我根据截止值1000将数据分为两部分,这是两组的分布。 enter image description here

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

2 个答案:

答案 0 :(得分:0)

让我们假设您的数据帧称为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

...假设我正确理解了您。但是我想我既不正确理解您的问题,也不了​​解您解决问题的方法。

答案 1 :(得分:0)

虽然不漂亮,但是可以。

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