我已经在 Pandas 中创建了一个包含 DateTimeIndex 的重采样数据框 DF1。我有另一个数据框 DF2,它也包含 DateTimeIndex 和时间列。如果 DF2 中的时间实例落在 DF1 中 DateTimeIndex 的 30 分钟间隔内,我想要用 DF1 中 30 分钟间隔的适当“速度”标记 DF2 中的每个时间实例。
我创建了这个脚本尝试实现这个目标,但我认为它失败了,因为DF1的datetimeindex是不可变的,所以我的timedelta请求无法为块创建起始点。我想过一个想法,是否可能将DF1的datetimeindex复制到一个新列中,其中对象是可变的,但我还没有成功,所以对逻辑不是100%确定。我很乐意尝试,但目前我已经陷入停滞状态一段时间了,希望其他人能有一些想法。
DF1:
boat_id speed
time
2015-01-13 09:00:00 28.000000 0.000000
2015-01-13 09:30:00 28.000000 0.723503
2015-01-13 10:00:00 28.000000 2.239399
DF2
id boat_id time state
time
2015-01-18 16:09:03 319437 28 2015-01-18 16:09:03 2
2015-01-18 16:18:43 319451 28 2015-01-18 16:18:43 0
2015-03-01 09:39:51 507108 31 2015-03-01 09:39:51 1
2015-03-01 09:40:58 507109 31 2015-03-01 09:40:58 0
期望结果
id boat_id time state speed
time
2015-01-18 16:09:03 319437 28 2015-01-18 16:09:03 2 nan
2015-01-18 16:18:43 319451 28 2015-01-18 16:18:43 0 nan
2015-03-01 09:39:51 507108 31 2015-03-01 09:39:51 1 2.239399
2015-03-01 09:40:58 507109 31 2015-03-01 09:40:58 0 2.239399
我创建了这个脚本尝试实现这个目标,但我认为它失败了,因为DF1的datetimeindex是不可变的,所以我的timedelta请求无法为块创建起始点。我想过一个想法,是否可能将DF1的datetimeindex复制到一个新列中,其中对象是可变的,但我还没有成功,所以对逻辑不是100%确定。我很乐意尝试,但目前我已经陷入停滞状态一段时间了,希望其他人能有一些想法。
for row in DF1.iterrows():
for dfrow in DF2.iterrows():
if dfrow[0] > row[0] - dt.timedelta(minutes=30) and dfrow[0] < row[0]:
df['test'] = row[1]
between_time()
函数呢? - Kartikfor row in DF1.iterrows(): for dfrow in DF2.iterrows(): if dfrow['time'] == DF1[pd.DataFrame.between_time(row[0] - dt.timedelta(minutes=15), row[0])]: df['test'] = row[1]
但是出现了TypeError: tuple indices must be integers, not str
的结果。如果我使用整数而不是字符串,我会得到IndexError: tuple index out of range
或者TypeError: unbound method between_time() must be called with DataFrame instance as first argument (got Timestamp instance instead)
。我是否漏掉了什么? - hselbie