【问题标题】:How to determine num entries per minute in pandas data如何确定熊猫数据中每分钟的条目数
【发布时间】:2018-12-27 22:05:09
【问题描述】:

我正在尝试详细了解每分钟列出“f”列中的条目的次数。

将熊猫导入为 pd 将日期时间导入为 dt f= ['f0001', 'f0001', 'f0001', 'f0001', 'f0020', 'f0008', 'f0001', 'f0005', 'f3203', 'f0002', 'f0002', 'f0001', 'f0201', 'f0001', 'f0439', 'f0233', 'f0008', 'f0003', 'f0009', 'f0005'] 日期 = ['20130101100103', '20130101100110', '20130101100125', '20130101100133', '20130101100100', '20130101100200', '20130101100200', '20130101100200', '20130101100200', '20130101100200', '20130101100200', '20130101100300', '20130101100300', '20130101100300', '20130101100300', '20130101100400', '20130101100400', '20130101100400', '20130101100400', '20130101100400'] d = {'日期':日期} 数据 = pd.DataFrame(d) 数据['用户'] = f data.date = data.date.apply(str) data.date = data.date.apply(lambda x: dt.datetime.strptime(x,'%Y%m%d%H%M%S')) s = data.groupby([data.date.map(lambda t: t.minute)]).count()

但到目前为止,我所拥有的只是以下

s 日期用户 日期 1 5 5 2 6 6 3 4 4 4 5 5

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    你快到了。您只需要将 data['user'] 添加到您的 groupby 子句中。

    data.groupby([[data.date.dt.minute, data['user']]).count().rename(columns={'date':'count'}).reset_index()
    

    输出:

    date    user    count
    0   1   f0001   4
    1   1   f0020   1
    2   2   f0001   1
    3   2   f0002   2
    4   2   f0005   1
    5   2   f0008   1
    6   2   f3203   1
    7   3   f0001   2
    8   3   f0201   1
    9   3   f0439   1
    10  4   f0003   1
    11  4   f0005   1
    12  4   f0008   1
    13  4   f0009   1
    14  4   f0233   1
    

    【讨论】:

    • data.date.dt.minute 而不是 map
    • 我不得不更改 columns={'date':'count'} bc 我想做 s[s.count >5] 并且出现错误,所以我使用 columns={'date' :'num'} 所以 s[s.num >5] 工作得很好
    【解决方案2】:

    你可以使用pd.Grouper:

    data.groupby(pd.Grouper(key='date', freq='min'))['user'].value_counts()
    

    完整示例,包括如何使用pandas 函数以更简单的方式创建您的数据框(我知道这不是您问题的主题,但我认为以下内容使这比导入datetime) 容易得多:

    df = pd.DataFrame({'date':dates, 'user':f})
    
    df['date'] = pd.to_datetime(df['date'], format='%Y%m%d%H%M%S')
    
    df.groupby(pd.Grouper(key='date', freq='min'))['user'].value_counts()
    

    结果:

    date                 user 
    2013-01-01 10:01:00  f0001    4
                         f0020    1
    2013-01-01 10:02:00  f0002    2
                         f0001    1
                         f0005    1
                         f0008    1
                         f3203    1
    2013-01-01 10:03:00  f0001    2
                         f0201    1
                         f0439    1
    2013-01-01 10:04:00  f0003    1
                         f0005    1
                         f0008    1
                         f0009    1
                         f0233    1
    Name: user, dtype: int64
    

    【讨论】:

    • 似乎 OP 只需要分钟数而不是整个日期。
    • 也许,我不太确定,OP 没有具体说明。我相信,我的回答确实解决了“每分钟列出 'f' 列中的条目多少次”。无论如何,您的答案也有效(+1 :))
    • OP 之前确实有预期的输出。不知道他为什么编辑这个问题。你说的对。您的回答确实回答了 OP 的问题。 +1
    • 完整日期没问题。速率(用户/分钟)是相关问题。
    • 我编辑了内容 b/c someone 无法将问题输入正确的 SO 格式(不断出现格式错误)。
    猜你喜欢
    • 2020-03-29
    • 2022-01-25
    • 2019-02-09
    • 2021-02-25
    • 2013-12-01
    • 1970-01-01
    • 2023-02-20
    • 2016-08-07
    • 2017-01-12
    相关资源
    最近更新 更多