给定以下输入,目标是使用Avg和Sum函数为每个Date按小时分组值.
按小时对其进行分组的解决方案是 here,但它不考虑新的一天.
按小时对其进行分组的解决方案是 here,但它不考虑新的一天.
Date Time F1 F2 F3 21-01-16 8:11 5 2 4 21-01-16 9:25 9 8 2 21-01-16 9:39 7 3 2 21-01-16 9:53 6 5 1 21-01-16 10:07 4 6 7 21-01-16 10:21 7 3 1 21-01-16 10:35 5 6 7 21-01-16 11:49 1 2 1 21-01-16 12:03 3 3 1 22-01-16 9:45 6 5 1 22-01-16 9:20 4 6 7 22-01-16 12:10 7 3 1
预期产量:
Date,Time,SUM F1,SUM F2,SUM F3,AVG F1,AVG F2,AVG F3 21-01-16,8:00,5,2,4,4 21-01-16,9:00,22,16,7.3,5.3,1.6 21-01-16,10:00,15,5 21-01-16,11:00,1,1 21-01-16,12:00,3,1 22-01-16,10,11,8,5.5,4 22-01-16,7,1
解决方法
您可以在读取csv文件时解析日期:
from __future__ import print_function # make it work with Python 2 and 3 df = pd.read_csv('f123_dates.csv',index_col=0,parse_dates=[0,1],delim_whitespace=True) print(df.groupby([df.index,df.Time.dt.hour]).agg(['mean','sum']))
输出:
F1 F2 F3 mean sum mean sum mean sum Date Time 2016-01-21 8 5.000000 5 2.000000 2 4.000000 4 9 7.333333 22 5.333333 16 1.666667 5 10 5.333333 16 5.000000 15 5.000000 15 11 1.000000 1 2.000000 2 1.000000 1 12 3.000000 3 3.000000 3 1.000000 1 2016-01-22 9 5.000000 10 5.500000 11 4.000000 8 12 7.000000 7 3.000000 3 1.000000 1
一直到csv:
from __future__ import print_function df = pd.read_csv('f123_dates.csv',delim_whitespace=True) df2 = df.groupby([df.index,'sum']) df3 = df2.reset_index() df3.columns = [' '.join(col).strip() for col in df3.columns.values] print(df3.to_csv(columns=df3.columns,index=False))
输出:
Date,F1 mean,F1 sum,F2 mean,F2 sum,F3 mean,F3 sum 2016-01-21,5.0,2.0,4.0,4 2016-01-21,9,7.333333333333333,5.333333333333333,1.6666666666666667,5 2016-01-21,15 2016-01-21,1.0,1 2016-01-21,12,3.0,1 2016-01-22,8 2016-01-22,7.0,1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。