2016-12-23 9 views
2

Возможно ли создать новый столбец в фрейме данных, где ячейки для «Х» основаны на значении другого столбца (ов). Пример ниже.Условно уносятся

Бутылки для AR1, PO1 и RU1 отличаются друг от друга.

До сих пор я могу получить только ячейки для всех значений в 'X'.

import pandas as pd 
import numpy as np 
import string 
import random 

N = 100 
J = [2012,2013,2014] 
K = ['A','B','C','D','E','F','G','H'] 
L = ['h','d','a'] 
S = ['AR1','PO1','RU1'] 

np.random.seed(0) 

df = pd.DataFrame(
    {'X': np.random.uniform(1,10,N), 
    'Y': np.random.uniform(1,10,N), 
    'J':np.random.choice(J, N), 
    'R':np.random.choice(L, N), 
    'S':np.random.choice(S,N) 
    }) 

df['bins_X'] = pd.qcut(df['X'], 10) 

print(df.head()) 

enter image description here

Выход я хотел бы иметь:

enter image description here

EDIT;

На моих реальных данных я получаю ValueError: ребра не уникальны. Могу ли я решить это с помощью ранга? Как бы добавить это к предлагаемому решению?

ответ

3

Простое использование pd.qcut в groupby на S

df['bins_X'] = df.groupby('S').X.apply(pd.qcut, q=10, labels=np.arange(10)) 

df.groupby(['bins_X', 'S']).size().unstack() 

S  AR1 PO1 RU1 
bins_X    
0   3 4 4 
1   3 3 4 
2   3 3 4 
3   2 3 4 
4   3 4 4 
5   3 3 3 
6   2 3 4 
7   3 3 4 
8   3 3 4 
9   3 4 4 

отпусков параметра labels, если вы хотите, чтобы они имели свои собственные уникальные края

df['bins_X'] = df.groupby('S').X.apply(pd.qcut, q=10) 
+0

Я получаю сообщение об ошибке при выходе от аргумента метки : 'ValueError: несовместимые категории в категорическом concat'. Любая идея почему? – lmo

+0

Возможно, вы используете старую версию панд. Я нашел [эту ссылку] (http://pandas.pydata.org/pandas-docs/version/0.15.2/categorical.html), которая описывает ошибку в pandas 0.15. Вы можете обновить (если я даже прав, что это проблема) – piRSquared

+0

Спасибо, что нашли ссылку. Я взгляну. – lmo

 Смежные вопросы

  • Нет связанных вопросов^_^