Как я могу разделить мою нормализацию на две части согласно значениям столбца? - PullRequest
0 голосов
/ 16 марта 2019

HI У меня есть данные столбца в пандах с сильно искаженным распределением: data distribution

Я разделил данные на две части в соответствии со значением отсечения 1000, и это распределение по двум группам. enter image description here

Теперь я хочу нормализовать со значениями от 0 до 1. Я хочу выполнить «дифференциальную» нормализацию, чтобы значения на левой панели были нормализованы в диапазоне от 0 до 0,5, а на правой панели - от 0,5 до 1, все в одном столбце. Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

Это не красиво, но работает.

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
0 голосов
/ 16 марта 2019

Предположим, ваш фрейм данных называется 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

... при условии, что я вас правильно понял. Но я думаю, что не понимаю ни твою проблему должным образом, ни твой подход к ее решению.

...