微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在pandas中分组两个字段?

给定以下输入,目标是使用Avg和Sum函数为每个Date按小时分组值.
按小时对其进行分组的解决方案是 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 举报,一经查实,本站将立刻删除。

相关推荐