2016-09-01 8 views
2

私の例では、異なるIPアドレスごとに、フィールド上で繰り返される平均時間差(時/分/秒)を計算しようとしています。 さらに、各ip行のカウントを含む列。パンダの平均時差

私のデータフレームは、次のようになります。私はそれがtimediffを試してみました起動するには、見当もつかない

{u'date': {3233: Timestamp('2016-08-08 00:39:00'), 
    3551: Timestamp('2016-08-08 13:03:00'), 
    349036: Timestamp('2016-08-20 21:37:00'), 
    349040: Timestamp('2016-08-21 16:11:00'), 
    349049: Timestamp('2016-08-21 16:19:00'), 
    378843: Timestamp('2016-08-25 01:30:00')}, 
u'ipAddress': {3233: u'98.249.244.22', 
    3551: u'98.249.244.22', 
49036: u'98.211.135.179', 
349040: u'98.211.135.179', 
349049: u'98.211.135.179', 
378843: u'98.248.215.244'}} 

しかし:

date     ipAddress 
2016-08-08 00:39:00 98.249.244.22 
2016-08-08 13:03:00 98.249.244.22 
2016-08-20 21:37:00 98.211.135.179 
2016-08-21 16:11:00 98.211.135.179 
2016-08-21 16:19:00 98.211.135.179 
2016-08-25 01:30:00 98.248.215.244 

マイ所望の出力:

ipAddress   avg_time_diff count 
98.249.244.22  avg_diff_1   2 
98.211.135.179 avg_diff_2   3 
98.248.215.244 0     1 

reproducicleのDF私はそれがどのように動作し、行を "ウィンドウ関数"として反復するかを理解しているかどうかはわかりません。事前

答えて

1

で おかげでapplying different functions to dataframe columnsを参照してください:

(df.groupby('ipAddress') 
    .date 
    .agg({'count': 'count', 
     'avg_time_diff': lambda group: group.sort_values().diff().mean()})) 

# Output 
#    count avg_time_diff 
# ipAddress       
# 98.211.135.179  2  00:08:00 
# 98.248.215.244  1   NaT 
# 98.249.244.22  2  12:24:00 
+0

コードがうまく動作します。私の考えは:(散布図で)プロットしたい場合、avg_time_diffとvg_time_diffを比較するには、avg_time_diffを数値形式に変換する必要がありますか? @Alexander – xxxvinxxx

+1

次のように結果の秒属性にアクセスできます: '.avg_time_diff.dt.seconds' – Alexander