【问题标题】:Iterating w/ Pandas DataFrame and Changing Values使用 Pandas DataFrame 进行迭代并更改值
【发布时间】:2013-11-01 23:41:14
【问题描述】:

我有一个 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 的值。有用,但不是我想要的。

有什么建议吗?

谢谢!

【问题讨论】:

    标签: python csv pandas


    【解决方案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
    

    【讨论】:

    • 是的,我想要一个矢量化操作。比遍历yes要好得多?至少那是我一直在读的。像魅力一样工作。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    • 2019-04-17
    • 2013-09-02
    • 1970-01-01
    • 2015-02-14
    • 2019-04-10
    • 1970-01-01
    相关资源
    最近更新 更多