2017-04-26 8 views
-1

私は、日付、従業員およびイベントの列を持つdfを持っています。 'イベント'には値[1,3,5]がある場合は誰かが終了した場合[0,2,4]がある場合。 「従業員」というのは、各従業員のプライベート番号です。それはDFの頭だ:私はDFをソートパンダの合計時間

employee event registration    date 
0   4  1    1 2010-10-18 18:11:00 
1  17  1    1 2010-10-18 18:15:00 
2   6  0    1 2010-10-19 06:28:00 
3   8  0    0 2010-10-19 07:04:00 
4  15  0    1 2010-10-19 07:34:00 

と私は1ヶ月[年と月が私の変数である]から値を持っています。

df = df.where(df['date'].dt.year == year).dropna() 
df = df.where(df['date'].dt.month== month).dropna() 

各従業員の仕事の合計時間を示すdfを作成します。 従業員は同じ日に出入りし、毎日数回行うことができます。

答えて

0

あなたがsumdiffによる違いを取得groupbyboolean indexingを必要とするようだ:

year = 2010 
month = 10 

df = df[(df['date'].dt.year == year) & (df['date'].dt.month== month)] 

もっと一般的な解決策はgroupbyyearmonthに追加します:うん、私はGROUPBYが必要

df =df['date'].groupby([df['employee'], 
         df['event'], 
         df['date'].rename('year').dt.year, 
         df['date'].rename('month').dt.month]).apply(lambda x: x.diff().sum()) 
+0

ではなく、 〜によってdf ['event']。イベント0は入ってくることを意味し、イベント1は出ることを意味します。しかし、小さな変更の後、それはうまく動作します。 –