2017-08-24 7 views
1

私はgroupbyの結果のすべての行を操作しようとしています。私は、各グループにダース以上の異なる「タスク」(、B、C、D、... z)を持っている場合を除きpandas groupbyの複数行で操作する

import pandas as pd 
import numpy as np 

def tdiff(dff): 
# return(dff[dff.task.eq('d')].start - dff[dff.task.ne('d')].end) 
    return(dff[dff.task.eq('d')].start - dff.end) 

a = [] 
p = 0 
while p < 6: 
    i = 0 
    while i < 4: 
     a.insert(i,p) 
     i = i + 1 
    p = p + 1 

d={'task':pd.Series(6*['a','b','c','d'],name='task'), 
    'jobid':pd.Series(a), 
    'start':pd.Series(np.random.randn(24)), 
    'end':pd.Series(np.random.randn(24))} 

df = pd.DataFrame(d) 

print(df) 

dt = df.groupby('jobid').apply(tdiff) 
dt.name='tdiff' 
print(type(dt)) 
print(dt) 

: は基本的に私は、次のようなものを持っています。そして、すべてのグループがタスク 'd'が保証されていることを除いて、すべてのタスクを保証するわけではありません。タスク 'd'の横に少なくとも1つのタスクが追加されます。

各GROUPBY結果では、私はd.startおよび他のすべてのタスクの終わりの違いを取得したいです。 どうすればいいですか?

私は適用関数を試しましたが、それは系列を返すようです。しかし、私は 'd'以外のすべてのNaNを取得します。私は、各グループの他のすべてのタスクの「開始」値からd.endを減算する方法がわからないと思います。

ありがとうございました!

答えて

2

するpivot()sub()の使用を検討して:OPコードから生成df

df2 = df.pivot(columns="task", index="jobid") 
df2.end.sub(df2.start.d, axis=0) 

として:

  end jobid  start task 
0 -1.223702  5 -0.458517 a 
1 0.045843  5 -0.676103 b 
2 -0.661233  5 1.213528 c 
3 -0.339473  5 0.090109 d 
4 2.474916  4 0.069272 a 
5 0.562003  4 0.307962 b 
6 0.286008  4 -0.045996 c 
7 0.770700  4 1.053486 d 
8 -0.948754  3 -0.173639 a 
9 0.576441  3 -1.085345 b 
10 0.098523  3 1.399861 c 
11 0.983254  3 -0.976588 d 
12 -0.286155  2 -0.542215 a 
13 -1.959281  2 -0.436720 b 
14 1.020525  2 1.050937 c 
15 0.815528  2 2.173647 d 
16 0.158771  1 -2.584689 a 
17 0.239464  1 0.521442 b 
18 0.463753  1 -0.919359 c 
19 0.430110  1 -0.996819 d 
20 0.084908  0 0.599807 a 
21 0.615123  0 -1.563351 b 
22 -0.027279  0 -0.755369 c 
23 0.826941  0 2.228655 d 

出力sub()の:

task   a   b   c   d 
jobid           
0  -2.143747 -1.613532 -2.255934 -1.401714 
1  1.155591 1.236284 1.460572 1.426930 
2  -2.459802 -4.132928 -1.153122 -1.358119 
3  0.027834 1.553029 1.075111 1.959842 
4  1.421430 -0.491483 -0.767478 -0.282786 
5  -1.313812 -0.044266 -0.751343 -0.429582 
関連する問題