Я пытаюсь автоматизировать расчет for loop
в 34 различных группах.У меня есть набор данных, который содержит точки X и Y для 400 районов, расположенных в 34 провинциях.Для каждой провинции я хочу рассчитать расстояние от столицы этой провинции до каждого из районов провинции.
Затем я хочу повторить расчет для столицы района следующей провинции и ее районов.
То, что я уже пробовал, чрезвычайно элементарно и не подходит для автоматизации ожидаемых результатов.
import pandas as pd
import mpu
### my basic coding ability would lead me to do something like this 34 times,
### manually hunting for the index with the capital and concating results
df = pd.read_csv('https://raw.githubusercontent.com/rocketfish88/democ/master/af-districts.csv')
new_df = df[0:27]
distance = []
for i in range(new_df.shape[0]):
distance.append(mpu.haversine_distance((new_df['Y'][7], new_df['X'][7]), (new_df['Y'][i], new_df['X'][i])))
Вот как я решил эту проблему:
import pandas as pd
import numpy as np
import mpu
df = pd.read_csv('https://raw.githubusercontent.com/rocketfish88/democ/master/af1.csv')
j = []
for i in range(399):
j = df[df['Capital'] == 1][['Y', 'X', 'Province', 'District', 'Capital']]
j.rename(columns={'Y': 'CapY', 'X': 'CapX'}, inplace=True)
df1 = df.merge(j, how = 'left', on = ['Province']) # this is it!
container = []
for i in range(399):
container.append(mpu.haversine_distance((df1['Y'][i], df1['X'][i]),
(df1['CapY'][i], df1['CapX'][i]))) # working?
container = pd.Series(container)
df1 = pd.concat((df1, container.rename('distance')), axis = 1)
Хотя есликто-нибудь все еще смотрит,
Я мог бы использовать некоторую помощь, чтобы выяснить, почему этот цикл работает:
container = []
for i in range(399):
container.append(mpu.haversine_distance((df1['Y'][i], df1['X'][i]),
(df1['CapY'][i], df1['CapX'][i])))
И этот цикл НЕ работает:
for i in range(399):
df1['distance2'] = ''
df1['distance2'][i] = mpu.haversine_distance((df1['Y'][i], df1['X'][i]),
(df1['CapY'][i], df1['CapX'][i]))