多个熊猫数据帧的时间顺序?

时间:2019-10-15 12:19:11

标签: python pandas dataframe

给出一个带有标识符和时间戳列的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

如何仅对相应id列的第二个DataFrame(DF2)中时间戳早于时间戳的那些行过滤第一个DataFrame(DF1)?

结果数据集将是:

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

注意:X项被过滤掉,因为DF2中的时间戳早于DF1中的时间戳(而不是之后)。

预先感谢您的考虑和答复。

2 个答案:

答案 0 :(得分:2)

我们可以使用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()

答案 1 :(得分:2)

首先,将DF2中的“已访问”列重命名为“已访问_2”。然后合并id上的两个数据帧。最后,在“ visited_2”之前选择时间戳为“ visited”的数据,并保留所需的列。

DF2.rename(columns={'visited': 'visited_2'}, inplace=True)
DF = pd.merge(DF1, DF2, on=['id'])
DF.loc[DF['visited'] < DF['visited_2'], ['id', 'visited']]