社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

ha10 • 3 年前 • 1402 次点击  

我想找出一个小时作为一个小组时的合格分钟数。由于我正在处理一个大型数据集,是否可以使用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
 
1402 次点击  
文章 [ 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