Вы близки, нужно только сравнить столбец id2
с transform
Series
и отфильтровать по boolean indexing
:
df = firstS[firstS['id2'] == firstS.groupby('id1')['id2'].transform(min)]
print (df)
id1 id2 num1
0 1 1 9
1 1 1 4
5 2 6 9
6 2 6 1
7 2 6 5
10 3 2 8
Обычно пользовательские действия в WindowsInstaller используют что-то от таблиц msi для помещения чего-то в любую таблицу msi.
Дополнительно WindowsInstaller-команда уменьшает любые управляемые расширения для установщиков, причины, по которым найдены везде в сети.
Но, я действительно некоторое время назад выяснял расширение для создания организованных пользовательских действий для WindowsInstallers, применимого с WiX, который работает все еще, но существует более новое решение, к тому же работают, реальное расширение для WiX для разрешения организованных пользовательских действий.
Я делаю подобную вещь, но поставляю конфигурацию по умолчанию в файле MSI и затем использую MST для добавления файла пользовательской конфигурации. Это намного более надежно, поскольку все является "собственным" к установщику Windows, и я просто должен отослать маленький пользовательский MST каждому клиенту.
Больше информации о том, как я делаю это, как могут находить, в Простом решении заменяет крошечный файл в MSI?
Я рекомендовал бы Вам добавить XML-файл к установщику как один из компонентов, которые будут установлены. Это было бы самым легким путем и не потребует пользовательского действия.
WiX мог бы быть опцией для Вас. Это позволяет Вам настраивать конфигурационные XML-файлы во время использования установки XmlConfig.
Я решил это, добавив
/ installerPath = "[Оригиналдатабаза]
, чтобы пользовательские действия пользовательских действий (в табуке пользовательских действий проекта настройки) и чтения Значение с этим кодом в пользовательском действии:
Public Overrides Sub Commit(ByVal savedState As System.Collections.IDictionary)
MyBase.Commit(savedState)
Dim directoryOfMSI As String = IO.Path.GetDirectoryName(Context.Parameters("InstallerPath"))
'Do your work here
'...
End Sub
Ciao! Стефан