Предполагая, что ваша серия состоит из datetime
объектов, вам необходимо использовать Series.apply
. Пример -
import datetime
df['<column>'] = df['<column>'].apply(lambda dt: datetime.datetime(dt.year, dt.month, dt.day, dt.hour,15*(dt.minute // 15)))
Приведенный выше пример всегда округляет до предыдущего квартала (поведение аналогично функции пола).
РЕДАКТИРОВАТЬ
Округлить до правильного четверть часа (например, если его 7 минут 30 секунд после предыдущего квартала показать следующий квартал). Мы можем использовать приведенный ниже пример -
import datetime
df['<column>'] = df['<column>'].apply(lambda dt: datetime.datetime(dt.year, dt.month, dt.day, dt.hour,15*round((float(dt.minute) + float(dt.second)/60) / 15)))
Приведенное выше будет учитывать только самые последние секунды, если вы хотите учесть миллисекунду / микросекунду, вы можете добавить это к вышеприведенному уравнению как - (float(dt.minute) + float(dt.second)/60 + float(dt.microsecond)/60000000)
На самом деле не имеет смысла "останавливать выполнение" окна, поскольку окно обрабатывает только события, которые ему отправляются, например, события мыши, клавиатуры или рисования, и игнорирует их заставит программу казаться зависшей. Что вам следует сделать, так это отключить все элементы управления в вашем фрейме, это сделает их серыми и даст пользователю понять, что с ними нельзя взаимодействовать в данный момент.
Вы также можете полностью отключить родительский фрейм вместо отключение всех элементов управления на нем. Загляните в класс wxWindowDisabler , у конструктора есть параметр для указания окна, с которым можно взаимодействовать, и все другие окна приложения будут отключены.
Если вы позже захотите выполнить вторичное программы, то вы можете использовать для этого функцию wxExecute () .
Я тоже искал подобное решение и придумал это решение, создать фрейм, отключить другие окна, выполнив frame.MakeModal (), и остановить запуск выполнения и цикл обработки событий после показывает фрейм, и когда фрейм закрыт, выйдите из цикла событий, например Я вот пример использования wxpython, но он должен быть похож на wxwidgets.
import wx
class ModalFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, style=wx.DEFAULT_FRAME_STYLE|wx.STAY_ON_TOP)
btn = wx.Button(self, label="Close me")
btn.Bind(wx.EVT_BUTTON, self.onClose)
self.Bind(wx.EVT_CLOSE, self.onClose) # (Allows main window close to work)
def onClose(self, event):
self.MakeModal(False) # (Re-enables parent window)
self.eventLoop.Exit()
self.Destroy() # (Closes window without recursion errors)
def ShowModal(self):
self.MakeModal(True) # (Explicit call to MakeModal)
self.Show()
# now to stop execution start a event loop
self.eventLoop = wx.EventLoop()
self.eventLoop.Run()
app = wx.PySimpleApp()
frame = wx.Frame(None, title="Test Modal Frame")
btn = wx.Button(frame, label="Open modal frame")
def onclick(event):
modalFrame = ModalFrame(frame, "Modal Frame")
modalFrame.ShowModal()
print "i will get printed after modal close"
btn.Bind(wx.EVT_BUTTON, onclick)
frame.Show()
app.SetTopWindow(frame)
app.MainLoop()