2017-04-09 40 views
0

熊貓數據幀(「DF」)看起來像:大熊貓:由總和檢索值後組

    name  id   time 
1095    One  1  12:03:37.230812 
1096    Two  2  10:56:29.314745 
1097   Three  3  10:58:18.897624 
1098   Three  3  09:45:38.755116 
1099    Two  2  09:02:59.472508 
1100    One  1  12:28:38.341024 

在此,我沒有的操作,其是

df = df.groupby(by=['id'])[['time']].transform(sum).sort('time', ascending=False) 

在所得的df我想迭代並得到響應作爲名稱和總時間。我怎樣才能達到最後的DF(從groupby/transform response)?所以結果應該是這個樣子:

name  time 

One  24:03:37.230812 
Two  19:56:29.314745 
Three  19:58:18.897624 
+0

時間不會通過'sum'工作。即使你通過python的'datetime'添加時間,並且如果時間增加超過24小時,它將被打印爲'00:03:37.230812'而不是'24:03:37.230812' –

+0

我已經設法放下樣本碼。看看你是否從中得到一些想法https://gist.github.com/ajinkyapisal/118f8541cffcc2480ffe58f9dcd156b1 –

+0

時間補充工作正常..響應有點不同,它將其轉換成格式n天hh:mm:ss。我的挑戰是得到的名稱,因爲這是不屬於後來的操作 – Neo

回答

1

我認爲你需要將列timeto_timedelta第一。

然後groupbynameid和聚集sum

df.time = pd.to_timedelta(df.time) 
df = df.groupby('name', as_index=False)['time'].sum().sort_values('time', ascending=False) 
print (df) 
    name     time 
0 One 1 days 00:32:15.571836 
1 Three 0 days 20:43:57.652740 
2 Two 0 days 19:59:28.787253 

df = df.groupby('id', as_index=False)['time'].sum().sort_values('time', ascending=False) 
print (df) 
    id     time 
0 1 1 days 00:32:15.571836 
2 3 0 days 20:43:57.652740 
1 2 0 days 19:59:28.787253 

最後有可能轉換到timedeltas通過secondstotal_seconds,另一個談話是here

df.time = df.time.dt.total_seconds() 
print (df) 
    id   time 
0 1 88335.571836 
2 3 74637.652740 
1 2 71968.787253 
+0

組通過「ID」是我所做的,因爲名稱可以是多人相同的,挑戰最後提取名稱,同時準備迴應..有沒有在id之後讀取名稱的方法和排序?一種方法是創建(初始數據框的)克隆數據框並從那裏讀取。任何其他有效的方式 – Neo

+0

我不知道如果明白你需要'df.groupby(['id','name'],as_index = False)'? – jezrael