2016-11-24 5 views
0

特定のデータフレームから次の(2番目の)これが存在しない場合は、時間に応じてnan/natを返す必要があります。以下の例で考えてみます。最初の値を取得することは簡単で、のいずれかによって達成することができる次のページ/前のページ前のページ次のページ/前のページ前のページ次のページ/前のページ第12章データフレームのグループ化

>>> df1 = pd.DataFrame({'School': {0: 'DEF', 1: 'ABC', 2: 'PQR', 3: 'DEF', 4: 'PQR', 5: 'PQR'}, 'OpenTime': {0: '08:00:00.000', 1: '09:00:00.000', 2: '10:00:23.563', 3: '09:30:05.908', 4: '07:15:50.100', 5: '08:15:00.000'}, 'CloseTime': {0: '13:00:00.000', 1: '14:00:00.000', 2: '13:30:00.100', 3: '15:00:00.768', 4: '13:00:00.500', 5: '15:50:32.534'}, 'IsTopper':{0:'1',1:'1',2:'1',3:'1',4:'1',5:'-1'}}) 
>>> df1 
     CloseTime IsTopper  OpenTime School 
0 13:00:00.000  1 08:00:00.000 DEF 
1 14:00:00.000  1 09:00:00.000 ABC 
2 13:30:00.100  1 10:00:23.563 PQR 
3 15:00:00.768  1 09:30:05.908 DEF 
4 13:00:00.500  1 07:15:50.100 PQR 
5 15:50:32.534  -1 08:15:00.000 PQR 

>>> df1.groupby(['School', 'IsTopper'])['OpenTime'].first() 

OR

>>> (df1.groupby(['School', 'IsTopper'])).apply(lambda x:x.iloc[0])['OpenTime'] 

投げるでしょう...iloc[1]を使用して次の(第2)の値を取得し、次の上記のエラー。

 School IsTopper  OpenTime Next_OpenTime 
0  DEF  1  08:00:00.000 09:30:05.908 
1  ABC  1  09:00:00.000  
2  PQR  1  10:00:23.563 07:15:50.100 
3  DEF  1  09:30:05.908  
4  PQR  1  07:15:50.100  
5  PQR  -1  08:15:00.000  

答えて

0
>>> df1['Next_OpenTime'] = (df1.groupby(['School', 'IsTopper']))['OpenTime'].shift(-1) 
>>> df1 
     IsTopper  OpenTime School Next_OpenTime 
0   1 08:00:00.000 DEF 09:30:05.908 
1   1 09:00:00.000 ABC   NaN 
2   1 10:00:23.563 PQR 07:15:50.100 
3   1 09:30:05.908 DEF   NaN 
4   1 07:15:50.100 PQR   NaN 
5   -1 08:15:00.000 PQR   NaN 

最後に、私は上記の例の場合には、次の出力を取得しようとしています

関連する問題