2017-06-28 33 views
1

に適用される自分の2D関数に配列引数を渡す私は、私はまた、入力2つの配列として受け取る機能を持つ以下のパンダのデータフレームはパンダGROUPBY

df 
         long  lat weekday hour 
dttm             
2015-07-03 00:00:38 1.114318 0.709553  6  0 
2015-08-04 00:19:18 0.797157 0.086720  3  0 
2015-08-04 00:19:46 0.797157 0.086720  3  0 
2015-08-04 13:24:02 0.786688 0.059632  3 13 
2015-08-04 13:24:34 0.786688 0.059632  3 13 
2015-08-04 18:46:36 0.859795 0.330385  3 18 
2015-08-04 18:47:02 0.859795 0.330385  3 18 
2015-08-04 19:46:41 0.755008 0.041488  3 19 
2015-08-04 19:47:45 0.755008 0.041488  3 19 

を与えています:

import pandas as pd 
import numpy as np 

def time_hist(weekday, hour): 
    hist_2d=np.histogram2d(weekday,hour, bins = [xrange(0,8), xrange(0,25)]) 
    return hist_2d[0].astype(int) 

私は望みます私の2D機能を次のグループの各グループに適用する:

df.groupby(['long', 'lat']) 

私は試してみました* args 〜.apply():

df.groupby(['long', 'lat']).apply(time_hist, [df.weekday, df.hour]) 

ただし、「ビンの寸法はサンプルxの寸法と同じでなければなりません。」というエラーが表示されます。

もちろん、寸法が不一致です。全体のアイデアは、各グループにどのミニミニ(平日、時間)アレイを送るかを事前に知らないということです。

私はそれをどのように行うのですか?

答えて

1

の操作を行います。

import pandas as pd 
import numpy as np 

df = pd.read_csv('file.csv', index_col=0) 


def time_hist(x): 
    hour = x.hour 
    weekday = x.weekday 
    hist_2d = np.histogram2d(weekday, hour, bins=[xrange(0, 8), xrange(0, 25)]) 
    return hist_2d[0].astype(int) 


print(df.groupby(['long', 'lat']).apply(time_hist)) 

出力:

long  lat  
0.755008 0.041488 [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,... 
0.786688 0.059632 [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,... 
0.797157 0.086720 [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,... 
0.859795 0.330385 [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,... 
1.114318 0.709553 [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,... 
dtype: object