Количество одновременных процессов в пандах - PullRequest
0 голосов
/ 04 июля 2018

С учетом Pandas dataframe , который представляет, когда некоторые программы запускают для работы и когда заканчивают (т.е. одна строка - одна программа):

      starts            finishes
2018-01-01 12:00    2018-01-01 15:00
2018-01-01 16:00    2018-01-01 20:00
2018-01-01 16:30    2018-01-01 20:00
2018-01-01 17:00    2018-01-01 21:00
                ...

Мне нужно рассчитать количество одновременных программ в каждый раз, представленный в таблице . Таблица выше становится следующей:

      time             number_of_conc_progs
2018-01-01 12:00                 1
2018-01-01 15:00                 0
2018-01-01 16:00                 1
2018-01-01 16:30                 2               
2018-01-01 17:00                 3
2018-01-01 20:00                 1                
2018-01-01 21:00                 0 
                     ...

Если программа запускается в 12:00 (например), и текущее число процессов n , то в 12:00 число имеет значение n + 1 .

Если программа завершает в 12:00 (например), и текущее число процессов n , то в 12:00 число имеет значение n-1 .

1 Ответ

0 голосов
/ 04 июля 2018
# creation of the dataframe
df = pd.DataFrame([
    ["2018-01-01 12:00", "2018-01-01 15:00"], 
    ["2018-01-01 16:00", "2018-01-01 20:00"], 
    ["2018-01-01 16:30", "2018-01-01 20:00"], 
    ["2018-01-01 17:00", "2018-01-01 21:00"]])
df.columns = ["starts", "finishes"]

# number of progs increases of 1 for start times
starts = pd.DataFrame()
starts["time"] = df.starts
starts["number_of_conc_progs"] = 1

# number of progs decreases of 1 for finishes times
finishes = pd.DataFrame()
finishes["time"] = df.finishes
finishes["number_of_conc_progs"] = -1

# then I merge the starts and the finishes dataframes
result = pd.DataFrame()
result = pd.concat([starts,finishes])
# I sort the time values
result = result.sort_values(by=['time'])
# If there is several starts or finishes at the same time, I sum them
result = result.groupby(['time']).sum()
# I do a cumulation sum to get the actual number of progs running
result.number_of_conc_progs = result.number_of_conc_progs.cumsum()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...