gpt4 book ai didi

python - 如何有效地展开 Pandas 中的日期范围跨度?

转载 作者:太空宇宙 更新时间:2023-11-03 11:29:19 24 4
gpt4 key购买 nike

我有一个 Pandas 数据框 (attendance_records)。它包含本地学校的出勤记录。

每一行有 4 列:1) 缺勤学生的姓名 (name),2) 学生的地址 (address),3) 第一天缺勤 (start),4) 最后缺勤缺席日(结束)。

例如,一行可以是:

Bobby   101 1st Street  9/1/2014     9/3/2014

这意味着 Bobby 在 9 月 1 日到 9 月 3 日(含)之间的每一天都不在。

我想展开表格如下:

Bobby 101 1st Street 9/1/2014
Bobby 101 1st Street 9/2/2014
Bobby 101 1st Street 9/3/2014

到目前为止,我有一些代码(如下)可以完成这项工作,但它在大表上真的很慢,因为它基本上是逐行遍历表。关于如何使事情变得更快的任何想法?

import pandas as pd
def full_data(dataframe):
allframe = pd.DataFrame()
for i in dataframe.index:
newframe = pd.DataFrame()
newframe['dates'] = pd.date_range(dataframe.iloc[i].start, dataframe.iloc[i].end, freq = 'D')
newframe['name'] = dataframe.iloc[i]['name']
newframe['address'] = dataframe.iloc[i]['address']
allframe = allframe.append(newframe)
if i%1000 == 0:
print i
return allframe

attendance_records = full_data(attendance_records)

最佳答案

对于较大的数据帧,pandas 函数 append 可能会很慢。相反,我建议将 newframes 存储在 python 列表中,而不是使用 concat仅将所有帧附加一次的函数。

import pandas as pd
def full_data(dataframe):
allframes = []
for i in dataframe.index:
newframe = pd.DataFrame()
newframe['dates'] = pd.date_range(dataframe.iloc[i].start, dataframe.iloc[i].end, freq = 'D')
newframe['name'] = dataframe.iloc[i]['name']
newframe['address'] = dataframe.iloc[i]['address']
allframes.append(newframe)
return concat(allframes)

请注意,这尚未经过测试。

关于python - 如何有效地展开 Pandas 中的日期范围跨度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25894931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com