Есть ли способ удалить строки, где метки индекса меняются по всей строке - PullRequest
0 голосов
/ 20 марта 2020

Я разрабатываю ввод в узловую диаграмму networkx для просмотра трафика c между отправителями. Фрейм данных имеет несколько столбцов. Я создал новый столбец submit_datetime_node_out, который дублирует столбец submit_datetime_node_in, но сдвинут на одну строку вверх. Таким образом, я могу получить длительности между узлами и узлами. Проблема в том, что при изменении идентификатора рабочего задания мне нужно получить последнюю строку, прежде чем она изменится на None, чтобы я мог удалить ее. В противном случае submit_datetime_node_out для последней записи идентификатора рабочего задания захватывает submit_datetime_node_in для нового идентификатора рабочего заказа и создает очень длинный край и искажает результаты. Я был бы очень признателен за любые указания по этому вопросу.

мой код выглядит следующим образом: ( df4_1 пример прилагается)

import pandas as pd

df4_1 = df3_1[
    ['Work Order ID', 'Service Request ID', 'Work_Order_Type', 'Support_Group', 'Priority', 'Submit_DateTime_Node_IN',
     'Submitter_Node_IN']]
df4_1['Submit_DateTime_Node_OUT'] = df4_1['Submit_DateTime_Node_IN'].shift(-1)
df4_1['Submitter_Node_OUT'] = df4_1['Submitter_Node_IN'].shift(-1)

from sklearn import preprocessing

le = preprocessing.LabelEncoder()

WOD = df4_1['Work Order ID']
le = preprocessing.LabelEncoder()
WOD_LE_TRNS = le.fit_transform(WOD)
df4_1['WOD_LE_TRNS'] = pd.Series(WOD_LE_TRNS)

SDNO = df4_1['Submit_DateTime_Node_OUT']
WOD_LE_TRANS = df4_1['WOD_LE_TRNS']

for i in WOD_LE_TRNS:
    for j in SDNO:
        if df4_1.loc[i + 1, 'WOD_LE_TRNS'] != df4_1.loc[i, 'WOD_LE_TRNS']:
            df4_1.loc[j, 'Submit_DateTime_Node_OUT'] = None
        else:
            df4_1.loc[j, 'Submit_DateTime_Node_OUT']

1 Ответ

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

Я решил проблему, пометив изменение в идентификаторе рабочего заказа и затем удалив эти строки. Это тогда удалило все ложные края в диаграмме Узла NetworkX. Мой код выглядит следующим образом:

WOID = DF4_1['Work_Order_ID']
DF4_1['WOID_Check'] = (WOID.ne(WOID.shift(-1)))
DF4_2=DF4_1[DF4_1['WOID_Check'] == False]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...