Эффективно объединять только определенные строки в датафрейме - PullRequest
0 голосов
/ 02 июня 2018

Итак, у меня есть фрейм данных, который имеет время начала и окончания определенных действий в последующих строках с одинаковыми идентификатором и активностью.Время от времени есть ряд без конца, который я хочу отбросить evtl.(id 3 и 5 в этом примере).Сопряженные строки (с парами id / act: 1 / 10,2 / 10 и 1/10 в другое время) можно объединить, т. Е. Вторая строка может быть удалена.Я могу добавить время окончания, просто сместив один столбец, но мне трудно избавиться от ненужных строк, не просматривая весь фрейм данных.

import pandas as pd
df = pd.DataFrame([[1,10,20],[1,10,25],[2,10,40],[2,10,41],[3,10,42],[1,10,45],[1,10,45],[5,10,50]], columns=['id','act','time'])
df["time 2"]=df["time"].shift(-1)

1 Ответ

0 голосов
/ 02 июня 2018

Большое спасибо за быстрый ответ, но я сам исправил это с помощью очень простого решения:

df = pd.DataFrame([[1,10,20],[1,10,25],[2,10,40],[2,10,41],[3,10,42],[1,10,45],[1,10,45],[5,10,50]], columns=['id','act','time'])

id  act  time
0   1   10    20
1   1   10    25
2   2   10    40
3   2   10    41
4   3   10    42
5   1   10    45
6   1   10    45
7   5   10    50
df["end"]=df["time"].shift(-1)
df["id 2"]=df["id"].shift(-1)
df["act 2"]=df["act"].shift(-1)
df.drop(df.index[len(df)-1],inplace=True)

   id  act  time  time 2  id 2  act 2
0   1   10    20    25.0   1.0   10.0
1   1   10    25    40.0   2.0   10.0
2   2   10    40    41.0   2.0   10.0
3   2   10    41    42.0   3.0   10.0
4   3   10    42    45.0   1.0   10.0
5   1   10    45    45.0   1.0   10.0
6   1   10    45    50.0   5.0   10.0

df=df.loc[(df["id"]==df["id 2"])== (df["act"]==df["act 2"])]
df.drop(columns=["id 2","act 2"],axis=0,inplace=True)

   id  act  time   end
0   1   10    20  25.0
2   2   10    40  41.0
5   1   10    45  45.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...