首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按月日时间分组使用熊猫

按月日时间分组使用熊猫
EN

Stack Overflow用户
提问于 2019-12-06 01:19:47
回答 2查看 353关注 0票数 1

以下是我的dataframe外观:

代码语言:javascript
运行
复制
                   user_id  time    hour weekday    location 
updated_at                                          
2019-09-02 05:29:00 29279   5:29:35  5   0            A      
2019-09-02 05:29:00 29279   5:29:39  5   0            A      
2019-09-02 05:29:00 29279   5:29:42  5   0            A      
2019-09-02 05:29:00 29279   5:29:49  5   0            B       
2019-09-02 05:32:00 29279   5:32:28  5   0            C       

对于每一天,我要每个位置的每小时行和。

*想要实现这样的df.groupby(["month-day hour", "location]).count()

现在,我已经创建了附加列,该列加入了月日时间。

代码语言:javascript
运行
复制
               user_id  time    hour weekday    location  date-hour
updated_at                                          
2019-09-02 05:29:00 29279   5:29:35  5   0            A       9-2 5
2019-09-02 05:29:00 29279   5:29:39  5   0            A       9-2 5
2019-09-02 05:29:00 29279   5:29:42  5   0            A       9-2 5
2019-09-02 05:29:00 29279   5:29:49  5   0            B       9-2 5
2019-09-02 05:32:00 29279   5:32:28  5   0            C       9-2 5

然后使用df.groupby(["date-hour", "location]).count(),因为现在索引是“月-日时间”格式,所以我不能利用日期索引。

如果无法实现*,如何将“月-日时间”格式更改为更正日期时间。当我尝试pd.to_datetime("9-10 11")时,它认为11是一年给我的Timestamp('2011-09-10 00:00:00')

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-06 01:26:27

只需从datetime对象中删除分钟和第二个信息即可。这应该可以做到:

数据

代码语言:javascript
运行
复制
df = pd.DataFrame([['2019-09-02 05:29:00', '29279', 'A'],
 ['2019-09-02 05:29:00', '29279', 'A'],
 ['2019-09-02 05:29:00', '29279', 'A'],
 ['2019-09-02 05:29:00', '29279', 'B'],
 ['2019-09-02 05:32:00', '29279', 'C']], columns = ['datetime', 'user_id', 'location'])
df['datetime'] = pd.to_datetime(df['datetime'])

print(df.to_string())



             datetime user_id location
0 2019-09-02 05:29:00   29279        A
1 2019-09-02 05:29:00   29279        A
2 2019-09-02 05:29:00   29279        A
3 2019-09-02 05:29:00   29279        B
4 2019-09-02 05:32:00   29279        C

溶液

代码语言:javascript
运行
复制
df['time_hour'] = df['datetime'].map(lambda x: x.replace(minute=0, second=0))

输出

代码语言:javascript
运行
复制
print(df.groupby(['time_hour', 'location']).size().reset_index().to_string())

            time_hour location  0
0 2019-09-02 05:00:00        A  3
1 2019-09-02 05:00:00        B  1
2 2019-09-02 05:00:00        C  1
票数 1
EN

Stack Overflow用户

发布于 2019-12-06 01:40:35

我相信你只需要df.index.floor('H')location

代码语言:javascript
运行
复制
df_out = (df.groupby([df.index.floor('H'), 'location']).location.count()
            .reset_index(1, name='count'))

Out[311]:
                    location  count
updated_at
2019-09-02 05:00:00  A            3
2019-09-02 05:00:00  B            1
2019-09-02 05:00:00  C            1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59205562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档