Python 创建时间序列数据帧的最快方法
我想获取包含时间间隔和时间重复的数据,基本上使用任何给定时间的第一次出现并向前填充来创建时间序列。考虑下面的例子。 假设这是我们感兴趣的时间范围: 时间 1:00 1:01 1:02 1:03 1:04 1:05Python 创建时间序列数据帧的最快方法,python,pandas,dataframe,time,series,Python,Pandas,Dataframe,Time,Series,我想获取包含时间间隔和时间重复的数据,基本上使用任何给定时间的第一次出现并向前填充来创建时间序列。考虑下面的例子。 假设这是我们感兴趣的时间范围: 时间 1:00 1:01 1:02 1:03 1:04 1:05 merge\u asof 请参见下面的解决方案,以查看最终解决方案 首先,我们需要将这些列更改为pd.Timedelta: df1['Time'] = pd.to_timedelta(df1['Time'] + ':00') df2['Occurance'] = pd.to_timed
merge\u asof
请参见下面的解决方案,以查看最终解决方案
首先,我们需要将这些列更改为pd.Timedelta
:
df1['Time'] = pd.to_timedelta(df1['Time'] + ':00')
df2['Occurance'] = pd.to_timedelta(df2['Occurance'] + ':00')
然后我们可以合并
pd.merge_asof(df1, df2, left_on='Time', right_on='Occurance')
Time Occurance Value
0 0 days 01:00:00 0 days 01:00:00 R
1 0 days 01:01:00 0 days 01:00:00 R
2 0 days 01:02:00 0 days 01:00:00 R
3 0 days 01:03:00 0 days 01:03:00 T
4 0 days 01:04:00 0 days 01:03:00 T
5 0 days 01:05:00 0 days 01:05:00 S
这有两个问题:
T
s而不是G
sleft\u on
/right\u on
pd.merge_asof(df1.set_axis(['Occurance'], axis=1), df2)
Occurance Value
0 0 days 01:00:00 R
1 0 days 01:01:00 R
2 0 days 01:02:00 R
3 0 days 01:03:00 T
4 0 days 01:04:00 T
5 0 days 01:05:00 S
但是我们仍然有T
s而不是G
s,这是因为看看df2
Occurance Value
0 0 days 01:00:00 R
1 0 days 01:03:00 G # same Occurance
2 0 days 01:03:00 L # same Occurance
3 0 days 01:03:00 P # same Occurance
4 0 days 01:03:00 T # same Occurance
5 0 days 01:05:00 S
很明显,熊猫们选择了最后一只,而OP想要第一只。因此,让我们再次尝试使用删除重复项
解决方案
不确定,但我想到了pandas.merge\u asof。这里有一些简单化的例子:就好像“a”列是timestamp/date类型一样。另见
pd.merge_asof(df1.set_axis(['Occurance'], axis=1),
df2.drop_duplicates('Occurance'))
Occurance Value
0 0 days 01:00:00 R
1 0 days 01:01:00 R
2 0 days 01:02:00 R
3 0 days 01:03:00 G
4 0 days 01:04:00 G
5 0 days 01:05:00 S