2016-03-28 8 views
1

の次元を減らすためにGROUPBY使用して、私はPythonは:パンダはのはDFそれを呼ぶことにしましょう、私のデータフレームでデータフレーム

serial gps_dt lat long dist 
1  25Mar x1 y1 Nan 
1  26Mar x2 y2 0.01 
1  27Mar x3 y3 1.25 (assume this is the 5th occurrence < 160) 
2  24Mar x4 y5 Nan 
2  25Mar x5 y5 2.1 
2  26Mar x6 y6 1.01 
2  27Mar x7 y7 175.2 
2  28Mar x8 y8 179.3 (assume this is the 5th occurrence > 160) 

のように見え、これが続くのデータを持っています。私は既にシリーズを持っています。checkと呼んで、serial[i] == serial[i+1]とすれば教えてください。私が今やりたいのは、それらが等しい場合、条件hdist < 160の下にserial, gps_dt_first, gps_dt_last, avg_lat, avg_longを含む新しいデータフレームを構築し、この半径内に少なくとも5回出現します。 hdist > 160場合、私は別のグループを構築したい場合は、次の5つの出現は、最初のものよりも大きい160

の160の範囲内にある場合にのみ、たとえば、出力は次のようになります。

serial gps_dt_first gps_dt_last avg_lat avg_long 
1  25Mar  27Mar  avg_x avg_y 
2  27Mar  28Mar  avg_x avg_y 

Iをパンダのgroup byのドキュメントを見ています。データはすでにSASからserial, gps_dtオーダにあります。 df.groupby(['serial', 'gps_dt'])をやる必要がありますか?

必要に応じてDFが、グループ化されると、コードの私の考えは(擬似コードのアウトラインのより)である:

if check == true and hdist < 160 and 5 or more occurrences (how to count the occurrences): 
    result['serial'] = df.serial (first in serial; how to extract) 
    result['gps_dt_first'] = df.gps_dt (first in gps_dt) 
    result['gps_dt_last'] = df.gps_dt (last in gps_dt) 
    result['avg_lat'] = df.lat.mean() (only for the subset of serial meeting criteria) 
    result['avg_long'] = df.long.mean() (same here) 
else if check == true and hdist > 160 and 5 or more occurrences; 
    do same as above 
else: 
    delete 

答えて

関連する問題