Время упорядочения нескольких панд DataFrames? - PullRequest
1 голос
/ 15 октября 2019

Дано DataFrame с идентификатором и столбцами меток времени:

DF1:

id    visited
 X    2019-01-07T01:23:45.678
 X    2019-01-08T01:23:45.678
 Y    2019-01-08T03:44:54.789

И отдельным DataFrame с похожими атрибутами:

DF2:

id    visited
 X    2019-01-01T05:23:45.678
 Y    2019-01-08T06:44:54.789
 Y    2019-01-09T09:11:23.476
 Z    2019-01-03T08:12:12.678

Как может первый DataFrame (DF1) фильтруется только для тех строк, где временная метка находится перед временной меткой во втором фрейме данных (DF2) для соответствующего столбца id?

Результирующий набор данных будет иметь вид:

id    visited
 Y    2019-01-08T03:44:54.789

Примечание: записи X отфильтрованы, потому что метка времени в DF2 предшествует метке времени в DF1 (не после).

Заранее благодарим вас за внимание и ответ.

Ответы [ 2 ]

2 голосов
/ 15 октября 2019

Сначала переименуйте столбец «посещенные» из DF2 в «посещенные_2». Затем объедините два фрейма данных в id. Наконец, выберите данные с отметкой времени посещения, а не с посещением и оставьте нужные вам столбцы.

DF2.rename(columns={'visited': 'visited_2'}, inplace=True)
DF = pd.merge(DF1, DF2, on=['id'])
DF.loc[DF['visited'] < DF['visited_2'], ['id', 'visited']]
2 голосов
/ 15 октября 2019

Мы можем использовать merge_asof

df2['Have']=True
s=pd.merge_asof(df1.sort_values('visited'),df2.sort_values('visited'),on='visited',by='id',direction = 'forward')
  id                 visited  Have
0  X 2019-01-07 01:23:45.678   NaN
1  X 2019-01-08 01:23:45.678   NaN
2  Y 2019-01-08 03:44:54.789  True
#s=s[s.Have].copy()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...