根据时间拆分数据帧的行



我有一个熊猫数据帧df,如下所示:

df
Out[16]: 
Start     End Value Start Realtime End Realtime Duration
0     0    2999     1         736051       736051    59.98
1  3000  104999     0         736051       736051  5639.98

对于每一行,我需要检查Start RealtimeEnd Realtime列以及它们是否跨越一天(例如。Start Realtime[0] = 29-05-2016 22:30:00End Realtime[0]=30=05-2006 01:00:00我应该将行分成 2 行:

一个从Start Realtime = 29-05-2016 22:30:00End Realtime = 29-05-2016 23:59:59

一个从Start Realtime = 30-05-2016 00:00:00End Realtime = 30-05-2016 01:00:00

Value列中保持相同的值,并重新计算持续时间(以秒为单位(以及startend列(在样本中(

如果我能保持截止时间(在本例中为午夜(灵活,那就太好了。

只需一行一行地为初学者。这个想法是,如果你有一行需要拆分,然后返回一个包含两行的数据帧;否则返回一个包含 1 的数据帧。然后将其追加到正在创建的新数据帧上。

expanded_df = pd.DataFrame()
for i, row in df.iterrows():
expanded_df = expanded_df.append(applyFunc(row), ignore_index=True)

对于每一行,创建一个截止时间日期时间对象,该对象最接近start_time,但在它之后。然后看看它是否介于start_time和end_time之间。最后,如果需要拆分,请创建两个新的 pandas 系列以返回更改的值。

def applyFunc(row):
start_time = datetime.datetime.fromtimestamp(row["Start Realtime"])
end_time = # Similar to above
custom_hour = 11
# custom_minute = ...
cutoff_time = # Start with datetime.datetime(start_time.year, start_time.month, start_time.day, custom_hour, 0, 0) and see how you need to adjust with datetime.timedelta(...)
if start_time < cutoff_time < end_time:
before_cutoff = # Logic for before_cutoff; you will probably find row.set_value("key", value) useful
after_cutoff = # Logic for after_cutoff series
return pd.DataFrame([before_cutoff,after_cutoff])
else:
return row

相关内容

  • 没有找到相关文章