python - 根据时间变量列对分组数据帧进行排序

标签 python python-2.7 sorting pandas dataframe

我有一个包含 ID、名称、日期时间和值的数据框。当我使用这个 DF 的数据类型时,我得到

ID - int64
time - object
value - int

我想按 ID 对数据帧进行分组,然后按时间顺序对行进行排序。我尝试了以下,

df['time'] = pd.to_datetime(df['time'])
p= df.groupby(['ID'])

然后我试了一下,

p.sort_values(['time'])

但出现错误,

AttributeError: Cannot access callable attribute 'sort_values' of 'DataFrameGroupBy' objects, try using the 'apply' method

然后我尝试了,

p['time'].apply(lambda x: x.sort_values())

这似乎仅适用于该专栏。我无法对所有列进行排序。我想在对 ID 进行分组后根据时间变量对整个数据帧进行排序。我知道这可能对我们来说很容易。但是试了很久都没有结果。有人可以帮我做这件事吗?

最佳答案

在您的特定情况下,您不能只用 sort 而不是 groupby 吗?例如

>>> df
   ID       time  value
0   1 2016-03-05     10
1   1 2016-01-04     20
2   2 2015-05-05     30
3   3 2016-01-02     40
>>> df.dtypes
ID                int64
time     datetime64[ns]
value             int64
dtype: object
>>> df.sort_values(["ID", "time"])
   ID       time  value
1   1 2016-01-04     20
0   1 2016-03-05     10
2   2 2015-05-05     30
3   3 2016-01-02     40

这将根据每一行的 (ID, time) 的二元组键对它们进行排序,并且即使有多个类似 value 的列也会以相同的方式工作:

>>> df.sort_values(["ID", "time"]) # different df
   ID       time  value  value2
1   1 2016-01-04     20     200
0   1 2016-03-05     10     100
2   2 2015-05-05     30     300
3   3 2016-01-02     40     400

关于python - 根据时间变量列对分组数据帧进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36041539/

相关文章:

javascript - 嵌套条件排序 JavaScript 对象数组

python - 为什么我的 conda 环境会继承所有基础包?

python-2.7 - 从脚本运行 ffmpeg 命令时没有这样的文件或目录

python - ImportError : libs2. 所以:无法打开共享对象文件:没有这样的文件或目录

linux - 我如何在 python 中获得 unix 中的最大文件系统路径长度?

sorting - Pandas 排序并保持索引不变

mysql - 对特定列进行排序/分组,通过 SQL 查询重复其所有值

Python:类实例是类

python - 使用 Django Oscar 信号

python - 像 pubsubhubbub 这样不依赖于谷歌应用引擎的东西