Python 应用func以基于表中其他列的值生成新列

Python 应用func以基于表中其他列的值生成新列,python,pandas,apply,Python,Pandas,Apply,我试图通过将页面上花费的(总)时间除以“页面浏览量”得到页面上花费的平均时间 数据帧的一部分: > 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

我试图通过将页面上花费的(总)时间除以“页面浏览量”得到页面上花费的平均时间

数据帧的一部分:

>      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
我编写了一个func,将(HH:MM:SS)转换为秒,并将生成的数字(x)除以#页面浏览量(y)

尝试使用以下代码创建名为“AvgTimeOnPage”的列

df['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')
我的问题是-

当我将该函数“应用”到“页面上的时间”和“页面视图”列时,它是否会将两列中的值作为参数,并返回一个值,即“AvgTimeOnPage”,作为输出?我不太明白错误消息中给出的是'1'参数,而不是'2'


有人能解释为什么它不起作用吗?谢谢

确保列为时间增量:

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]

谢谢你的回复!我确实尝试过你的解决方案,它奏效了。但我的问题是:为什么该函数不接受两个参数(页面上的时间/x和页面浏览量/y)并输出一个新值AvgTimeOnPage,正如前面定义的那样?@Yumi-Ah,我明白了,apply接受一个参数(这是一行/系列),您在apply中以
x['time on page']
的形式访问列。作为(x,y)传递不起作用-我怀疑第二个参数被用作某种标志。
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]