Я хочу перебрать xlsx, используя Pandas, содержащий временные метки и получить время простоя - PullRequest
0 голосов
/ 23 марта 2020

Итак, у меня есть файл Excel с датой в первом столбце и метками времени с регулярным интервалом в последовательных строках и столбцом в конце, содержащим среднее значение. Если среднее значение меньше 100, я должен пройти по этому столбцу, указанному c, и найти ячейки с несколькими последовательными нулями, которые представляют время простоя.

После нахождения этих нулей я должен сохранить их временные метки и получить продолжительность этого времени простоя для этой даты. До сих пор я знаю, как выполнить итерацию и найти указанную строку c со средним значением ниже нуля. Я застрял в той части, где я могу найти 2 или более последовательных нуля и сохранить их временные метки.

Пример таблицы:

+---------+------------+------------+-------------+------------+---------+
|  Date   | Timestamp1 | Timestamp2 | TImestamps3 | Timestamp4 | Average |
+---------+------------+------------+-------------+------------+---------+
| 1-10-18 |        100 |        100 |           0 |        100 |      75 |
| 2-10-18 |        100 |          0 |           0 |        100 |      50 |
| 3-10-18 |        100 |          0 |           0 |          0 |      25 |
| 4-10-18 |        100 |        100 |         100 |        100 |     100 |
+---------+------------+------------+-------------+------------+---------+

Так что теперь все, что я хочу сделать, это получить это в словаре

{2-10-18:'Timestamp2-Timestamp3',3-10-18:'Timestamp2 Tmestamp4}

1 Ответ

0 голосов
/ 23 марта 2020

перенес вычисления в словари, так как я не смог найти подходящее решение через Pandas.

  #convert to dictionary
  A = df.set_index('Date').to_dict('index')

  #remove values where 'Average' is less than 100
  B = {key:value for key,value in A.items() if value['Average'] < 100}

  #get rid of the 'Average' key
  #it is not relevant to the solution
  for value in B.values():
     del value['Average']

  from collections import Counter,defaultdict
  d=defaultdict(list)

 #count the number of 0s
 #if it is greater than one, keep
 #and append to the defaultdict d
 for key,value in B.items():
    m = Counter(value.values())
    M = list(value.values())
    #check for consecutive 0s in list
    test_for_consecutive_0 = any(i==j==0 for i,j in zip(M,M[1:]))
    if test_for_consecutive_0  and (m[0]>1):
        d[key].extend([key for key,val in value.items() if val==0])


 #join the values into a string
 result = {key:'-'.join(value) for key,value in d.items()}
 print(result)

 {'2-10-18': 'Timestamp2-TImestamps3',
  '3-10-18': 'Timestamp2-TImestamps3-Timestamp4'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...