2013-11-01 2 views
1

У меня есть кадр данных pandas, где я хочу назначить случайное число каждой строке на основе значения в строке и выписать фрейм данных.Iterating w/Pandas DataFrame и меняющиеся значения

Так что я пытаюсь:

for index, row in person[person['AGE_R'] == 1].iterrows(): 
    row = index, random.randint(1, 15) 

Но я не могу вполне понять, как выписать dataframe от него (не возможно?). Я смог вытащить список кортежей, которые я мог бы внести в рабочий формат, но я уверен, что есть лучший способ.

я ранее пробовал:

person[person['AGE_R'] == 1] = random.randint(1, 15) 

Но что отличает все 1-ые «AGE_R к тому, что когда-либо randint есть. Полезно, но не то, что я ищу.

Любые предложения?

Спасибо!

ответ

1

Если вы хотите сделать векторизованную операцию, вы можете использовать numpy.random.randint:

>>> df = pd.DataFrame({'AGE_R':[1,2,3,5,4,3,1]}) 
>>> df 
    AGE_R 
0  1 
1  2 
2  3 
3  5 
4  4 
5  3 
6  1 
>>> df.ix[df['AGE_R'] == 1, 'AGE_R'] = np.random.randint(1, 15, len(df[df['AGE_R'] == 1])) 
>>> df 
    AGE_R 
0  5 
1  2 
2  3 
3  5 
4  4 
5  3 
6  11 

Или вы можете использовать применять:

>>> df.ix[df['AGE_R'] == 1, 'AGE_R'] = df.ix[df['AGE_R'] == 1].apply(lambda x: np.random.randint(1, 15), axis = 1) 
>>> df 
    AGE_R 
0  5 
1  2 
2  3 
3  5 
4  4 
5  3 
6  12 
+0

Да, я хочу векторизованную операцию. Гораздо лучше, чем повторять через «да»? По крайней мере, это то, что я читал. Работал как шарм. Огромное спасибо. – tapzx2