2016-03-16 50 views
2

我有一個ID,名稱,日期時間和值的數據框。當我使用此DF的dtypes時,我得到根據時間變量對分組數據幀進行排序colum

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

@jezrael這是一個ID作爲單行和行數以前的列數和丟失所有其他列。這是不正確的。 – Observer

+0

嗯,你是對的。 (''ID'])。apply(lambda x:x ['time']。sort_values())。reset_index() ' – jezrael

回答

1

在你的具體情況下,你不能只是排序而不是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,時間)每行的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 
+0

謝謝。它運作良好。非常簡單的做法。 – Observer

相關問題