pandas之groupby() 分组

time                         data
2018-05-01 00:00:00.650   57
2018-05-01 00:00:01.990   54
2018-05-01 00:00:09.487   73
2018-05-01 00:00:14.607   95
2018-05-01 00:00:16.350   77
2018-05-01 00:00:16.397   28
2018-05-01 00:00:16.563   54
2018-05-01 00:00:25.457   19
2018-05-01 00:00:31.140   09
2018-05-01 00:00:54.427   18
2018-05-01 00:00:55.387   39
2018-05-01 00:01:02.193   97
2018-05-01 00:01:07.447   39
2018-05-01 00:01:09.020   41
2018-05-01 00:01:11.033   93
2018-05-01 00:01:25.693   42
2018-05-01 00:02:03.900   42
2018-05-01 00:02:04.190   84
2018-05-01 00:02:05.727   39
2018-05-01 00:02:10.910   40

现在有一个df的数据如上所示 ↑↑↑

现在要按照日期和小时进行分组,此时可以先将time列设置为索引,

df.set_index("time", inpalce=True)

inplace参数是表示在原数据框上修改,此时的df的time列就已经变成了索引,可以使用df.index进行验证。这里就不细说了。

至于为什么要把事件列设置为索引,是因为后面要根据日期和小时进行分组,这样取值更方便。接下来就会用到。

使用pandas的groupby函数进行分组:

dp = df.groupby([lambda x:x.day, lambda x:x.hour, "data"])

此时的dp是一个GroupBy对象,没有进行任何计算,不过已经具备了接下来对各分组执行运算所需要的一切信息。后面可以接GroupBy的计算方法,比如:sum(), meam(), size(),agg()等等。

为了进行下一步,我们在上面的一行代码后面加一个size()方法。

dp = df.groupby([lambda x:x.day, lambda x:x.hour, "data"]).size()

此时的dp经过计算可以进行显示了。如下所示↓↓↓

      data
1  0  18      1
      19      2
      28      1
      39      3
      40      1
      41      1
      42      2
      54      2
      57      1
      73      1
      77      1
      84      1
      93      1
      95      1
      97      1
dtype: int64

下面给最后一列统计的次数一个列明,进行保存:

new_dp = dp.reset_index(name="times")

new_dp是新生成的一个DataFrame:

    level_0  level_1  data  times
0         1        0    18      1
1         1        0    19      2
2         1        0    28      1
3         1        0    39      3
4         1        0    40      1
5         1        0    41      1
6         1        0    42      2
7         1        0    54      2
8         1        0    57      1
9         1        0    73      1
10        1        0    77      1
11        1        0    84      1
12        1        0    93      1
13        1        0    95      1
14        1        0    97      1

level_0标签是日期,也就是5月1号的1号;

level_1列就是小时了,因为每天是从0点开始的,所以就是0;

data列是原来df的data列数据,只不过也进行了分组处理;

times列是将data列分组后,每小时内出现的次数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值