我正在使用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)
进一步假设我想创建一个新列作为两列的函数A和B.在下面的例子中,我将使用一个简单的函数divide().要应用该功能,我可以使用df.apply()或np.vectorize():
def divide(a, b):
if b == 0:
return …Run Code Online (Sandbox Code Playgroud) 我知道要找到两个纬度,经度点之间的距离我需要使用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)