我正试图获得平均值。通过'pageviews'
潜入页面上花费的总时间,花在页面上的时间部分数据框:
> Page Month Pageviews Users Time on Page (HH:MM:SS)
> 0 /Products/.. 201503 1925 1006 27:43:45
> 1 /Products/.. 201502 1811 930 26:32:33
> 2 /Products/.. 201504 1781 969 28:05:38
我写了一个函数将(HH:MM:SS)转换成秒并将生成的数字(x)除以#pageviews(y)
def avg_time_on_page(x,y):
return (60*60*int(x.split(':')[0])+60*int(x.split(':')[1])+int(x.split(':')[2]))/y
尝试使用以下代码
创建名为“AvgTimeOnPage”的coldf['AvgTimeOnPage'] = df[['Time on Page','Pageviews']].apply(avg_time_on_page, axis=1)
得到错误消息
TypeError: ('avg_time_on_page() takes exactly 2 arguments (1 given)', u'occurred at index 0')
我的问题是 -
当我将“该功能”应用于“页面上的时间”和“ 'Pageviews'列,是否会将两列中的值作为参数并返回一个值,即'AvgTimeOnPage'作为输出?我不太明白错误消息,说'1'是arg,而不是'2'
有人可以解释为什么它不起作用?谢谢!
答案 0 :(得分:2)
确保列是timedelta:
In [11]: df.iloc[:, 4] # lazy way to access column with long name...
Out[11]:
0 27:43:45
1 26:32:33
2 28:05:38
Name: Time on Page (HH:MM:SS), dtype: object
In [12]: pd.to_timedelta(df.iloc[:, 4])
Out[12]:
0 1 days 03:43:45
1 1 days 02:32:33
2 1 days 04:05:38
Name: Time on Page (HH:MM:SS), dtype: timedelta64[ns]
注意:您可能需要设置此列。
然后你可以划分:
In [13]: pd.to_timedelta(df.iloc[:, 4]) / df['Pageviews']
Out[13]:
0 00:00:51.857142
1 00:00:52.762562
2 00:00:56.787198
dtype: timedelta64[ns]