Python 使用数据帧进行迭代并更改值

Python 使用数据帧进行迭代并更改值,python,csv,pandas,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]

我有一个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)
但这将“年龄”的所有1设置为randint的值。有用,但不是我想要的

有什么建议吗


谢谢大家!

如果要执行矢量化操作,可以使用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

如果要执行矢量化操作,可以使用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

是的,我想要一个矢量化的操作。比迭代好得多是吗?至少这是我一直在读的。工作得很有魅力。非常感谢。是的,我想要一个矢量化的操作。比迭代好得多是吗?至少这是我一直在读的。工作得很有魅力。非常感谢你。