Как поместить данные в фрейм данных в пандах - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть данные временного ряда, скажем машинное чтение следующим образом (скажем)

df['machine_r'] = [1,2,1,5,3,4,5,1,2,3,4,5,7,8,1,2.....] 

Как изменить фрейм данных следующим образом

If data in dataframe <= 25 percentile, value = 0.25, 
if 25p < data <=50p  value =  0.50,
if 50p<data <= 75p, value = 0.75,
if data>75p , value = 1

Я пытался

p25 = df['machine_r'].quantile(0.25)  ## p25 is 25 percentile 
p50 = df['machine_r'].quantile(0.5)
p75 = df['machine_r'].quantile(0.8)
p100 = df['machine_r'].quantile(1)
bins = [-100,p25,p50,p75,p100]
labels = [0.25, 0.5,0.75,1]
df['machine_r'] = pd.cut(df['copper'], bins=bins,labels=labels)

но он возвращает 0, 0,25, 0,5, 0,75, 1 в качестве категориальных значений, но они мне нужны как плавающие для дальнейшего анализа. Как это можно сделать?

1 Ответ

0 голосов
/ 10 ноября 2018

Вы можете разыграть его на плаву по astype:

df['new'] = pd.cut(df['machine_r'], bins=bins,labels=labels).astype(float)

Также лучше использовать qcut как упомянуто Сандип Кадапа :

df['new'] = pd.qcut(x=df.machine_r, q=[0, .25, .5, .8, 1.], labels=labels).astype(float)
print (df)
    machine_r   new
0           1  0.25
1           2  0.50
2           1  0.25
3           5  0.75
4           3  0.50
5           4  0.75
6           5  0.75
7           1  0.25
8           2  0.50
9           3  0.50
10          4  0.75
11          5  0.75
12          7  1.00
13          8  1.00
14          1  0.25
15          2  0.50

print (df.dtypes)
machine_r      int64
new          float64
dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...