python中的sapply等价物?

时间:2016-04-02 19:04:12

标签: python r sapply

我需要一次增加一行python DataFrame。

在R中,sapply()功能很快& efficent。如,

sapply(1:100, function(i) rnorm(50) ) 

生成一个50 x 100矩阵的(标准正态随机)数字,然后可根据需要进行转置和/或转换为数据框

如何在python中有效地做同样的事情?

4 个答案:

答案 0 :(得分:2)

考虑以下列表理解版本:

import numpy as np
import pandas as pd

df = pd.DataFrame([np.random.randn(50) for i in range(100)])

答案 1 :(得分:1)

R中的

sapply等同于python中的map

R中的

sapply(c(-1, 1), abs)与Python中的map(abs, (-1, 1))等效。但是map返回一个映射对象,因此,如果需要列表,则需要将其传递给list()。在Python中,您也可以使用列表推导[abs(i) for i in (-1, 1)]

您的示例不是sapply的好用例。无需使用矩阵即可实现:matrix(rnorm(5000), 50, 100)。同样,在Python中,使用import numpy as np可以使用np.random.normal(size=(50, 100))来实现。

答案 2 :(得分:0)

虽然列表理解是sapply()的更通用替代方法,但是对于所述问题,最有效的方法是省略列表理解:

import numpy as np
import pandas as pd

# randn takes dimensions for args: randn(d1, d2, ..., dn)
df = pd.DataFrame(np.random.randn(50,100))

答案 3 :(得分:-1)

Python可以通过列表理解轻松完成这样的事情:

import random as rand
[[rand.gauss(mu=0, sigma=1) for column in range(50)] for row in range(100)]

否则,您可以使用NumPy包进行高级矩阵操作。

- 安德烈