Если вы можете себе это позволить, JSmooth , похоже, делает то, что вам нужно. Последнее выпущено в 2007 году. Заметка о ее лицензии, взятой из самого приложения:
Сгенерированный исполняемый файл (пусковые установки, созданные JSmooth) находятся под LGPL с «исключением во время выполнения», аналогичным исключению лицензии gcc: не требуется, чтобы вы распространяли с ним исходный код, и что вы публикуете уведомление о jsmooth.
При использовании JSmooth существует раздел с надписью «Скелет», который позволяет вам выбрать некоторые предварительные Определенные параметры. Один из них - «Windowed Wrapper», который подходит для приложений GUI, описанных ниже:
Этот скелет обертывает приложения GUI.
- Нет консольных входов / выходов отображается
- Если виртуальная машина Java не найдена, она может отображать настраиваемый URL (обычно на странице загрузки java).
Аргументы могут быть переданы в (либо использовать механизм аргументов JSmooth по умолчанию, либо создать ярлык с аргументами).
Важным в этом скелете является проверка опции «Запустить java-приложение в процессе exe», которое приводит к запуску JVM в том же процессе, что и exe wrapper. Это означает, что в диспетчере задач Windows отображается только exe, в отличие от exe и java-процесса.
Альтернативой является создание собственной оболочки. См. этот справочник Oracle о том, как вызвать JVM из собственного приложения.
Вы можете сделать наложение на диктофон emp_id
на mgr_id
, а затем сделать рекурсивную функцию, такую как
idmap = dict(zip(df['emp_id'], df['mgr_id']))
def depth(id_):
if np.isnan(id_):
return 1
return depth(idmap[id_]) + 1
, чтобы вычислить глубину с учетом id
. Чтобы сделать его более эффективным (не повторяя вычисления для одного и того же id
), вы можете использовать запоминание (обрабатывается декоратором @functools.lru_cache
ниже):
import numpy as np
import pandas as pd
import functools
nan = np.nan
df = pd.DataFrame({'emp_id': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 'fn': ['Matthew', 'John', 'Chris', 'Sergey', 'Andrey', 'Karen', 'Tri', 'Drew', 'BD', 'Sreedhar'], 'ln': ['Reichek', 'Cottone', 'Winter', 'Bobkov', 'Botelli', 'Goetz', 'Pham', 'Thompson', 'Alabi', 'Kavali'], 'mgr_id': [nan, 3.0, 1.0, 2.0, 2.0, 7.0, 3.0, 7.0, 7.0, 7.0]})
def make_depth(df):
idmap = dict(zip(df['emp_id'], df['mgr_id']))
@functools.lru_cache()
def depth(id_):
if np.isnan(id_):
return 1
return depth(idmap[id_]) + 1
return depth
df['depth'] = df['mgr_id'].apply(make_depth(df))
print(df.sort_values(by='depth'))
yields [ 1111]
emp_id fn ln mgr_id depth
0 1 Matthew Reichek NaN 1
2 3 Chris Winter 1.0 2
1 2 John Cottone 3.0 3
6 7 Tri Pham 3.0 3
3 4 Sergey Bobkov 2.0 4
4 5 Andrey Botelli 2.0 4
5 6 Karen Goetz 7.0 4
7 8 Drew Thompson 7.0 4
8 9 BD Alabi 7.0 4
9 10 Sreedhar Kavali 7.0 4