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