我有一个熊猫数据帧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 Realtime
和End Realtime
列以及它们是否跨越一天(例如。Start Realtime[0] = 29-05-2016 22:30:00
和End Realtime[0]=30=05-2006 01:00:00
我应该将行分成 2 行:
一个从Start Realtime = 29-05-2016 22:30:00
到End Realtime = 29-05-2016 23:59:59
和
一个从Start Realtime = 30-05-2016 00:00:00
到End Realtime = 30-05-2016 01:00:00
在Value
列中保持相同的值,并重新计算持续时间(以秒为单位(以及start
和end
列(在样本中(
如果我能保持截止时间(在本例中为午夜(灵活,那就太好了。
只需一行一行地为初学者。这个想法是,如果你有一行需要拆分,然后返回一个包含两行的数据帧;否则返回一个包含 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