【发布时间】:2020-05-09 23:13:35
【问题描述】:
基本上我有提供开始时间、时隙数和每个时隙持续时间的数据。 我想将其转换为开始和结束时间的数据框 - 我已经实现了,但我不禁认为它效率不高或特别 Pythonic。 真实数据有多个ID,因此分组。
import pandas as pd
slots = pd.DataFrame({"ID": 1, "StartDate": pd.to_datetime("2019-01-01 10:30:00"), "Quantity": 3, "Duration": pd.to_timedelta(30, unit="minutes")}, index=[0])
grp_data = slots.groupby("ID")
bob = []
for rota_id, row in grp_data:
start = row.iloc[0, 1]
delta = row.iloc[0, 3]
for quantity in range(1, int(row.iloc[0, 2] + 1)):
data = {"RotaID": rota_id,
"DateStart": start,
"Duration": delta,
"DateEnd": start+delta}
bob.append(data)
start = start + delta
fred = pd.DataFrame(bob)
这可能会在其他地方得到回答,但我不知道如何正确搜索,因为我不确定我的问题是什么。
编辑:我更新了我的代码,使其函数调用更高效,速度更快,但我仍然想知道是否有矢量化方法。
【问题讨论】:
-
你有一个比“pythonic”代码对应的问题更具体/更少以意见为中心的问题吗?请参阅Meta Stack Exchange 上的Are Pythonic questions opinion-based?,认为问题是有效的只要其中仍然存在删除“pythonic”标准的内容。我已经猜测剩余的内容会是什么,并试图为此进行编辑;我们将不胜感激您对该编辑的评论。
-
您似乎正在给
append打很多电话。从我所见(以及others suggest)来看,concat几乎等同于append,但可以让您建立一个数据帧列表,然后在一次调用中将它们连接在一起。跨度> -
@CharlesDuffy 感谢您的编辑,这正是我想问的。谢谢你。 Pythonic 是一种糟糕的表达方式
标签: python python-3.x pandas