示例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
我想计算每小时的记录
答案 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中重新创建方向盘,使用提供的方法以获得更易读,更快速的代码。