根据时间变量colum对分组的数据帧进行排序

时间:2016-03-16 16:29:30

标签: python python-2.7 sorting pandas dataframe

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

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进行分组后根据时间变量对整个数据帧进行排序。我知道这可能很容易。但是已经尝试了很长时间没有任何结果。有人可以帮我这么做吗?

1 个答案:

答案 0 :(得分:2)

在您的特定情况下,您不能只是排序而不是groupby吗? E.g。

>>> 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,时间)的2元组键对它们进行排序,即使有多个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