need help 2024-02-06 11:37 采纳率: 25%
浏览 8
已结题

求python多条件按时间频率进行分组统计方法

要求:
需要通过python处理一个数据表,数据表里面包含操作时间和操作人员3个字段的内容,现要求统计从数据表的起始时间统计,每十分钟内,同一个操作人员操作次数,应该如何进行处理?
多条操作记录:

data = {'date': ['2022-01-01 00:00:01', '2022-01-01 00:16:00', '2022-01-01 00:32:00', '2022-01-01 00:15:00', '2022-01-01 06:11:00', '2022-01-01 10:15:00', '2022-01-01 12:22:00', '2022-01-01 14:00:00', '2022-01-01 17:34:00'],'name': [a,a,c,b,c,a,b,c,a]}

之前,通过学习其他博主的时间频率的统计方法,可以统计到,每十分钟内的操作次数,但是不知道该如何在此基础上拓展分组条件和设立频率计算的起始时间

custom_df = df.groupby(pd.Grouper(freq='10T')).count()

输出是这个的效果,仅为效果展示,数据没算哦:

date                 count
2022-01-01 00:00:00    1
2022-01-01 00:15:00    0
2022-01-01 00:30:00    1
.......

想要达到的效果是,仅为效果展示,数据没算哦:

date                    name       count 
2022-01-01 00:00:01      a          1
2022-01-01 00:15:01      a          2
2022-01-01 00:30:01      b          1
.......
  • 写回答

3条回答 默认 最新

  • GISer Liu 2024-02-06 11:41
    关注

    该回答引用自GPT-3.5,由博主GIS_Liu编写:

    你可以使用以下方法来解决这个问题:

    1. 首先,将数据表转换为 pandas DataFrame:
    import pandas as pd
    
    data = {'date': ['2022-01-01 00:00:01', '2022-01-01 00:16:00', '2022-01-01 00:32:00', '2022-01-01 00:15:00', '2022-01-01 06:11:00', '2022-01-01 10:15:00', '2022-01-01 12:22:00', '2022-01-01 14:00:00', '2022-01-01 17:34:00'],
            'name': ['a', 'a', 'c', 'b', 'c', 'a', 'b', 'c', 'a']}
    
    df = pd.DataFrame(data)
    df['date'] = pd.to_datetime(df['date'])
    
    1. 然后,你可以使用groupby来按照每十分钟内的时间窗口和操作人员进行分组,并计算操作次数:
    result = df.groupby([pd.Grouper(key='date', freq='10T'), 'name']).size().reset_index(name='count')
    

    这将会得到一个新的 DataFrame result,包含每十分钟内,每个操作人员的操作次数。

    1. 如果你需要从数据表的起始时间开始统计,你可以添加一个新的列来记录时间窗口的起始时间:
    result['start_time'] = result['date'].apply(lambda x: x - pd.Timedelta(minutes=x.minute % 10))
    

    这将会为每个时间窗口添加一个起始时间的列。

    1. 最后,你可以按照你想要的格式重新排列 DataFrame,以达到你想要的效果:
    result = result[['start_time', 'name', 'count']]
    

    这样,你就得到了按时间窗口和操作人员进行分组统计的结果。

    完整代码如下:

    import pandas as pd
    
    data = {'date': ['2022-01-01 00:00:01', '2022-01-01 00:16:00', '2022-01-01 00:32:00', '2022-01-01 00:15:00', '2022-01-01 06:11:00', '2022-01-01 10:15:00', '2022-01-01 12:22:00', '2022-01-01 14:00:00', '2022-01-01 17:34:00'],
            'name': ['a', 'a', 'c', 'b', 'c', 'a', 'b', 'c', 'a']}
    
    df = pd.DataFrame(data)
    df['date'] = pd.to_datetime(df['date'])
    
    result = df.groupby([pd.Grouper(key='date', freq='10T'), 'name']).size().reset_index(name='count')
    result['start_time'] = result['date'].apply(lambda x: x - pd.Timedelta(minutes=x.minute % 10))
    result = result[['start_time', 'name', 'count']]
    

    这个代码将会生成按时间窗口和操作人员进行分组统计的结果,并满足你的要求。希望对你有所帮助!如果还有其他问题,请随时提问。![img](https://userblink.csdnimg.cn/direct/3281b502cb5447e0aa06db9ebdf7f434.png

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月14日
  • 已采纳回答 2月6日
  • 创建了问题 2月6日