加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 11:48:36 所属栏目:Python 来源:网络整理
导读:给定以下输入,目标是使用Avg和Sum函数为每个Date按小时分组值. 按小时对其进行分组的解决方案是 here,但它不考虑新的一天. Date Time F1 F2 F321-01-16 8:11 5 2 421-01-16 9:25 9 8 221-01-16 9:39 7 3 221-01-16 9:53 6 5 121-01-16 10:07 4 6 721-01-16 1
给定以下输入,目标是使用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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读