Pandas: получить первое datetime-in и последнее datetime-out в одной строке - PullRequest
0 голосов
/ 05 августа 2020

Прежде всего заранее спасибо, здесь всегда есть ответы, поэтому мы многому учимся у экспертов. Я новичок, использующий «pandas» (это супер рука ie за то, что я пробовал и достиг до сих пор).

У меня есть эти данные, переданные мне вот так (нет доступа к началу координат), иногда 20к рядов и более. Столбцы «вход» и «выход» могут содержать одно или несколько данных на дату, поэтому, когда я получаю «вход», следующие данные могут быть «выходом» или «входом», в зависимости от того, что оставляет мне пустую ячейку, которая проблема (см. первое изображение).

original_data

I want to filter the first datetime-in, to left it in one column and the last datetime-out in another but the two in one row (see second image); the data comes in a csv file. I am doing this particular work manually with LibreOffice Calc (yeap).

enter image description here

So far, I have tried locating and relocating, tried merging, grouping... nothing works for me so i feel frustrated, ¿would you please lend me a hand? here is a минимальный образец файла

Кстати, engli sh не мой язык. ¡Большое спасибо!

1 Ответ

1 голос
/ 05 августа 2020

Сначала:

out_column = df["out"].tolist()

Это дает вам все даты выхода в виде списка, он нам понадобится позже.

in_column = df["in"].tolist() # in is used by python so I suggest renaming that row

Я рассматриваю NaT как NaN (Null) в этом Case.

Теперь нам нужно найти, какие строки оставить, что мы делаем, просматривая столбец in и сохраняя только строки после NaN (и первого):

filtered_df = []
tracker = False
for index, element in enumerate(in):
    if index == 0 or tracker is True:
        filtered_df.append(True)
        tracker = False
        continue
    if element is None:
        tracker = True
    filtered_df.append(False)
    

Затем вы фильтруете свой df с помощью этого логического списка:

df = df[filtered_df]

Теперь вы исправляете столбец out, удаляя нулевые значения:

while null in out_column:
    out_column.remove(null)

И последнее, но не менее важное: вы перезаписываете старый из столбца с новым:

df["out"] = out_column
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...