如何计算一个给定的数据帧的起始日期和总占用天数?

2024-05-15 02:08:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个csv文件,因此列表或数据框包含访问营地的开始和结束日期。在

    start_date   end_date
0   2016-01-21   2016-01-24
1   2016-01-28   2016-01-29
2   2016-02-02   2016-02-10
3   2016-02-08   2016-02-12
...

我想计算一个数据帧,其中一行表示时间段内的每一天,一列计算累计访问量,一列表示当天驻留的访客数,以及累计访问天数总和。在

我目前有一些黑客代码,它将访问者数据读入一个普通的python列表visitor_array,并为周期/年中的每个日期创建另一个列表year_array。然后,它在year_array中的每个日期循环,visitor_array上有一个内部循环,并在{}的当前元素中附加一个新访客计数和当天的常驻访客数量。在

^{pr2}$

然后我将year_array转换为pandas数据帧,创建一些cumsum列并忙于绘制等等

在大熊猫身上,有没有更优雅的Python/潘达西的方式来完成这些?在


Tags: 文件csv数据列表datearrayyearstart
1条回答
网友
1楼 · 发布于 2024-05-15 02:08:29

考虑到df具有起始/结束值的数据帧,以及d的最终数据帧,我会做如下的事情:

代码:

import numpy as np
import pandas as pd
import datetime

#    Create df sample
df = pd.DataFrame([['21/01/2016','24/01/2016'],
                    ['28/01/2016','29/01/2016'],
                    ['02/02/2016','10/02/2016'],
                    ['08/02/2016','12/02/2016']], columns=['start','end'] )
df['start'] = pd.to_datetime(df['start'])
df['end'] = pd.to_datetime(df['end'])

#    Create day index
temp_day = datetime.date(2016,1,1)
index = [(temp_day + datetime.timedelta(days=d)) for d in range(365)]

#    Create empty result df
# initialize df, set days as datetime in index
d = pd.DataFrame(np.zeros((365,3)),
                 index=pd.to_datetime(index),
                 columns=['new_visitor','occupancy','occupied_day'])

#    Iterate over df to fill d (final df)
for i, row in df.iterrows():
    # Add 1 if first day for new visitor
    d.loc[row.start,'new_visitor'] += 1
    # 1 if some visitor in df.start, df.end
    d.loc[row.start:row.end,'occupied_day'] = 1
    # Add 1 for visitor occupancy these days
    d.loc[row.start:row.end,'occupancy'] += 1

#cumulated days = some of occupied days
d['cumul_days'] = d.occupied_day.cumsum()
#cumulated visitors = some of occupancy
d['cumul_visitors'] = d.occupancy.cumsum()

结果输出print(d.loc['2016-01-21':'2016-01-29'])的一些摘录:

^{pr2}$

愿此代码有所帮助!在

相关问题 更多 >

    热门问题