IIUC, вам нужно:
df['visit']=df.groupby('id')['date'].transform(lambda x: pd.factorize(x)[0])
print(df)
<час> id date purchase visit
0 id1 date1 $10 0
1 id1 date1 $50 0
2 id1 date2 $30 1
3 id2 date1 $10 0
4 id2 date2 $10 1
5 id2 date3 $10 2
Необходимо динамично создать код / обработчики событий для каждой кнопки.
Требуется немного выполнения - посмотрите здесь: http://navpadexcel.blogspot.com/2006/11/httpwwwcpearsoncomexcelvbehtm.html
Лучший путь мог бы состоять в том, чтобы создать набор кнопок на форме (как многие, поскольку Вы думаете, что Вам будет нужно), заранее. Создайте код обработчика событий также. Сделайте их всех скрытыми первоначально.
Затем, когда Ваша форма открывается, можно динамично изменить подписи кнопки, сделать их видимыми и переместить их. Код события, который Вы создали первоначально, будет связан с активированными кнопками как ожидалось.
Я тоже смотрел на это. Кажется, вы можете запустить макрос, используя свойство onClick:
Command1.OnClick = "Macro1"
Затем создайте макрос с этим именем, который запускает нужную функцию. Это моя хитрость, пока я не найду что-нибудь получше.
Приведенный ниже код должен работать
Dim NewButton As OLEObject
Dim CodeModule As Object
Set NewButton = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
Link:=False, DisplayAsIcon:=False, Left:=52.5, Top:=Hght, _
Width:=202.5, Height:=26.25)
NewButton.Object.Caption = "Click Me!"
Set CodeModule = ActiveWorkbook.VBProject.VBComponents.VBE.ActiveCodePane.CodeModule
CodeModule.InsertLines CodeModule.CreateEventProc("Click", NewButton.Name) + 1, vbTab & "MsgBox ""Hello world"""
Sub Oval1_Click()
file = ActiveWorkbook.Name
Set Output = Workbooks.Add()
ActiveWorkbook.SaveAs Filename:="Try.xls"
Sheets(1).Select
ActiveSheet.Buttons.Add(460, 10, 140, 30).Select
ActiveSheet.Buttons.Text = "DATA"
ActiveSheet.Shapes("Button 1").Select
Selection.OnAction = "Book1.xlsm!data_Click"
End Sub
Sub data_Click()
MsgBox "you have clicked me"
ActiveSheet.DrawingObjects.Delete
End Sub