迭代w / Pandas DataFrame和更改值

时间:2013-11-01 23:41:14

标签: python csv pandas

我有一个pandas数据框,我想根据行中的值为每一行分配一个随机数,然后写出一个数据帧。

所以我在尝试:

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

但我无法弄清楚如何从中写出数据帧(不可能?)。我能够得到一个元组列表,我可以将其变成可行的格式,但我确信有更好的方法。

我之前尝试过:

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

但是,将'AGE_R'的所有1都设置为randint。有用,但不是我想要的。

有什么建议吗?

谢谢!

1 个答案:

答案 0 :(得分: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

或者您可以使用apply:

>>> 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