【发布时间】:2022-09-24 01:49:11
【问题描述】:
我创建了一个函数,用于分配每行所属的纬度和经度类别。但是,这个问题太慢了。我怎样才能提高性能?
这是我的代码。
def assign_segment(use_df: pd.DataFrame,
lat_categories: pd.core.indexes.interval.IntervalIndex,
lng_categories: pd.core.indexes.interval.IntervalIndex) -> pd.DataFrame:
\"\"\"
Assign segments based on the latitude and longtitude column of \"use_tb\".
Parameters
----------
use_df : pd.DataFrame
Use DataFrame.
lat_categories : pd.core.indexes.interval.IntervalIndex
Latitude interval categories.
(ex.) IntervalIndex([(35.809, 35.816], (35.816, 35.824],
(35.824, 35.832], (35.832, 35.84], (35.84, 35.848]])
lng_categories : pd.core.indexes.interval.IntervalIndex
Lontitude interval categories.
(ex.) IntervalIndex([(128.668, 128.685], (128.685, 128.703],
(128.703, 128.72], (128.72, 128.737]])
Returns
-------
use_df : pd.DataFrame
\"use_df\" with segments assigned.
\"\"\"
segment = []
# iterate each row and get the segment according to latitude and longitude
for idx, row in use_df.iterrows():
use_lat = row[\'use_lat\']
use_lng = row[\'use_lng\']
for lat_idx, lat_category in enumerate(lat_categories):
if use_lat in lat_category:
lat_segment = lat_idx + 1
break
for lng_idx, lng_category in enumerate(lng_categories):
if use_lng in lng_category:
lng_segment = lng_idx + 1
break
num_lng_grid = len(lat_categories) # number of longtitude grid
lng_num_digits = len(str(num_lng_grid)) # number of digits of lng_grid
segment.append((lat_segment*10**lng_num_digits)+lng_segment)
# create the segment column with the segment list that we created in this function
use_df[\'segment\'] = segment
return use_df
-
请添加一个小数据示例及其所需的输出。
-
您能否提供一个minimal reproducible example 主要是输入样本。
标签: pandas dataframe for-loop iteration