Кадр данных Pandas не изменяется после вызова функцииPython

Программы на Python
Ответить
Anonymous
 Кадр данных Pandas не изменяется после вызова функции

Сообщение Anonymous »

У меня есть фрейм данных pandas под названием plan. Внутри цикла я вызываю функцию с планом в качестве параметра. В функциональном плане изменяется на месте. Поскольку Python передает по значению, план также изменяется в вызывающей функции после вызова функции. Это работает нормально, за исключением одного раза: план изменяется в функции, но после выхода из функции он возвращается к своему значению до вызова функции. Как я могу это решить?
Под функцией:
def update_plan_and_advance_time(plan, assets, time, dt):
"""
determine next time and remove current time from plan, add new time when needed
"""
path = ''
atol = 1e-13
# don't drop multiples of dt
plan.drop(plan.index[np.isclose(plan['endtime'], time, rtol=0.0, atol=1e-08)
& ~np.isclose(np.mod(plan['endtime'], dt), 0.0, rtol=0.0, atol=atol)],
inplace=True)
new_dt_time = next_multiple(time, dt, atol)
if new_dt_time not in plan['endtime'].values:
plan.loc[plan['endtime'] == time, ['endtime', 'action']] = [new_dt_time, 'SAILING']
for asset in assets:
try:
# insert new_time when it is missing
index = plan[(plan['endtime'] > new_dt_time) & (plan['asset'] == asset)]['endtime'].idxmin()
try:
# when it exists, overwrite it
new_index = plan[(plan['endtime'] == new_dt_time) & (plan['asset'] == asset)]['endtime'].idxmin()
except ValueError:
new_index = plan.index.max() + 1
plan.loc[new_index] = {**plan.loc[index].to_dict(), 'endtime': new_dt_time}
except ValueError:
pass
for asset in assets:
if new_dt_time not in plan[plan['asset'] == asset]['endtime'].values:
new_index = plan.index.max() + 1
plan.loc[new_index] = [asset, asset.target_speed, 'SAILING', new_dt_time, None, None, None, None]
min_endtime = plan[plan['endtime'] > time]['endtime'].min()
plan.drop(plan.index[plan['endtime'] < min_endtime], inplace=True)
if plan[plan['endtime'] > min_endtime].empty:
plan.loc[plan['endtime'] == min_endtime, ['endtime', 'action']] = [new_dt_time + dt, 'SAILING']
elif min_endtime != new_dt_time:
actions = ['SG', 'ST', 'SL', 'PT', 'AH']
dummies = plan['action'].str.get_dummies(sep=', ').rename(columns=str.strip)
mask = dummies.reindex(columns=actions, fill_value=0).any(axis=1)
to_drop = plan.index[(plan['endtime'] == min_endtime) & mask]
plan.drop(index=to_drop, inplace=True)
return min_endtime


Подробнее здесь: https://stackoverflow.com/questions/798 ... ction-call
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»