计算每小时,每天的记录并创建多索引DataFrame作为输出

时间:2014-11-07 04:31:41

标签: python pandas

示例DataFrame:

process_id | app_path | start_time

所需的输出数据框应基于start_time列中的日期和时间值进行多索引,其中唯一日期作为索引的第一级别,一小时范围作为索引的第二级别,每个时隙中的记录计数应为计算

def activity(self):
    # find unique dates from db file
    columns = self.df['start_time'].map(lambda x: x.date()).unique()

    result = pandas.DataFrame(np.zeros((1,len(columns))), columns = columns)
    for i in range(len(self.df)):
        col = self.df.iloc[i]['start_time'].date()
        result[col][0] = result.get_value(0, col) + 1

    return result

我已经尝试了上面的代码,输出为:

15-07-2014 16-7-2014 17-07-2014 18-07-2014 3217 2114 1027 3016 我想计算每小时的记录

1 个答案:

答案 0 :(得分:7)

使用一些示例数据开始您的问题会很有帮助。由于您没有,我假设以下代表您的数据(看起来app_path未被使用):

rng = pd.date_range('1/1/2011', periods=10000, freq='1Min')
df = pd.DataFrame(randint(size=len(rng), low=100, high = 500), index=rng)
df.columns = ['process_id']

看起来您可以通过探索Pandas数据框中的groupby方法获益。使用groupby,上面的例子变成了一个简单的单行:

df.groupby( [df.index.year, df.index.month, df.index.day] ).count()

按小时分组意味着只需向小组添加小时:

df.groupby( [df.index.year, df.index.month, df.index.day, df.index.hour] ).count()

不要在Pandas中重新创建方向盘,使用提供的方法以获得更易读,更快速的代码。