python - 按日期分组不能在 Pandas 中排序?
问题描述
这是代码:
找出每天有多少用户提交。它必须从最近到较旧进行排序。
import pandas as pd
a=pd.read_csv("dataset.txt")
b=a[['date_su','users']]
b.sort_values(['date_su'],ascending=False).groupby(['date_su','users'])['date_su'].count()
结果是这样的:
date_su users
1/8/2018 Jk_28_j 1
KT1w_19_MN 33
KT1w_19_USER 9
KT1w_19_USER2 5
KT1w_19_USER3 7
KT1w_19_USER32 1
KT1w_19_USER35 8
KT1w_19_USER36 7
KT1w_19_USER8 8
KT1w_19_USER9 6
MRS sffdf 1
SINBAo 1
VIJJHxAFNI 1
W7jj24693U242 1
WW2pt710U455 1
10/7/2018 idMIa9p0c 1
KTw_19_MNG1 4
KTw_19_MNG2 18
KTw_19_USER1 4
KTw_19_USER22 8
KTw_19_USER32 7
KTw_19_USER33 5
KTw_19_USER34 1
KTw_19_USER35 3
10/8/2018 KTw_19_MNG1 8
KTw_19_USER1 5
KTw_19_USER2 2
KTw_19_USER3 3
最后一行似乎不是按日期排序,而是按用户排序。虽然它说sort_values(['date_su']
。如何使它按预期工作?
解决方案
我相信需要通过参数将值转换为日期parse_dates
时间read_csv
,如有必要还添加参数dayfirst=True
:
b=pd.read_csv("dataset.txt",
parse_dates=['date_su'],
usecols=['date_su','users'],
dayfirst=True)
然后排序MultiIndex
:
b.groupby(['date_su','users'])['date_su'].count().sort_index(level=[0,1], ascending=[False, True])
或者使用ascending=False
with 参数sort=False
来避免在 groupby 中排序:
b.sort_values(['date_su'],ascending=False).groupby(['date_su','users'], sort=False)['date_su'].count()
推荐阅读
- node.js - 如何在 Sequelize 中实现主动 MVC 模型
- mongodb - MongoDB/Spring:订阅集合更改
- go - 将切片传播为 args 列表
- python - 为什么将函数放入变量中时会执行(以及如何停止它)
- python-3.x - Google App Engine 部署失败,因为在工作区中找不到 requirements.txt 文件
- raster - 如何使用 csv 点使用 gdal 创建不规则栅格
- sql - SQL 中的层次控制跨度报告,没有 Oracle CONNECT BY 语法?
- javascript - 如果 div 框更高,它不会将其他内容向下推
- json - 如何防止我的 json 响应显示在浏览器中?
- javascript - 我该如何解决这个问题?Javascript