相关疑难解决方法(0)

Pandas的性能适用于np.vectorize以从现有列创建新列

我正在使用Pandas数据帧,并希望创建一个新列作为现有列的函数.我还没有看到之间的速度差的一个很好的讨论df.apply()np.vectorize(),所以我想我会问这里.

熊猫apply()功能很慢.根据我的测量结果(如下面的一些实验所示),使用np.vectorize()比使用DataFrame功能快25倍(或更多)apply(),至少在我的2016 MacBook Pro上使用.这是预期的结果,为什么?

例如,假设我有以下带N行的数据框:

N = 10
A_list = np.random.randint(1, 100, N)
B_list = np.random.randint(1, 100, N)
df = pd.DataFrame({'A': A_list, 'B': B_list})
df.head()
#     A   B
# 0  78  50
# 1  23  91
# 2  55  62
# 3  82  64
# 4  99  80
Run Code Online (Sandbox Code Playgroud)

进一步假设我想创建一个新列作为两列的函数AB.在下面的例子中,我将使用一个简单的函数divide().要应用该功能,我可以使用df.apply()np.vectorize():

def divide(a, b):
    if b == 0:
        return …
Run Code Online (Sandbox Code Playgroud)

python arrays performance numpy pandas

44
推荐指数
2
解决办法
1万
查看次数

带有熊猫数据帧的Vectorised Haversine公式

我知道要找到两个纬度,经度点之间的距离我需要使用hasrsine函数:

def haversine(lon1, lat1, lon2, lat2):
    lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
    dlon = lon2 - lon1 
    dlat = lat2 - lat1 
    a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
    c = 2 * asin(sqrt(a)) 
    km = 6367 * c
    return km
Run Code Online (Sandbox Code Playgroud)

我有一个DataFrame,其中一列是纬度,另一列是经度.我想知道这些点距离设定点有多远,-56.7213600,37.2175900.如何从DataFrame中获取值并将它们放入函数中?

示例DataFrame:

     SEAZ     LAT          LON
1    296.40,  58.7312210,  28.3774110  
2    274.72,  56.8148320,  31.2923240
3    192.25,  52.0649880,  35.8018640
4     34.34,  68.8188750,  67.1933670
5    271.05,  56.6699880,  31.6880620
6    131.88,  48.5546220,  49.7827730
7    350.71,  64.7742720,  31.3953780 …
Run Code Online (Sandbox Code Playgroud)

python haversine pandas

6
推荐指数
1
解决办法
5975
查看次数

标签 统计

pandas ×2

python ×2

arrays ×1

haversine ×1

numpy ×1

performance ×1