Py学习  »  Python

以小时为一组计算符合条件的分钟数-python

ha10 • 3 年前 • 1444 次点击  

我想找出一个小时作为一个小组时的合格分钟数。由于我正在处理一个大型数据集,是否可以使用pandas聚合函数来获得此输出?

user minutes hour
1    778     12
1    779     12
1    780     13
1    781     13
1    782     13
1    783     13

我试着用 df.groupby('hour').count() 但结果是错误的。

user hour minutes
1    12   2
1    13   4

我想要的正确输出是错误的,因为我希望第780分钟也包括在12小时内。

user hour minutes
1    12   3
1    13   4

非常感谢你的帮助。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/133007
 
1444 次点击  
文章 [ 1 ]  |  最新文章 3 年前
mozway
Reply   •   1 楼
mozway    3 年前

IIUC,你可以用 divmod 将除法和余数乘以60,并用 pandas.concat :

s1,s2 = df['minutes'].divmod(60)
(pd
 .concat([df,
          # select rows where hour is multiple of 60
          # and matching hour is not already the previous hour
                                          # decrement hour
          df[s1.ne(df['hour']-1)&s2.eq(0)].eval('hour = hour-1')
          ])
 .groupby('hour')
 .agg({'hour': 'first', 'minutes': 'count'})
)

或者,如果你已经知道小时和分钟是匹配的,只使用 mod :

mask = df['minutes'].mod(60).eq(0)
(pd
 .concat([df,
          df[mask].eval('hour = hour-1')
          ])
 .groupby('hour')
 .agg({'hour': 'first', 'minutes': 'count'})
)

输出:

      hour  minutes
hour               
12      12        3
13      13        4