首页 > 解决方案 > 为什么我不能在这里使用 groupby 函数计算另一列的平均值?

问题描述

我试图找到一组电子邮件的平均点击率,我想按发送时间对其进行分类,以确定点击率是否受到发送时间的影响。但出于某种原因,pandas 只是不想让我找到 CTR 值的平均值。

正如您将在下面看到的,我尝试使用 mean 函数来查找每次 CTR 的平均值,但我不断收到错误:

DataError: No numeric types to aggregate

这对我来说意味着我的点击率数字不是整数或浮点数,而是字符串。但是,尽管它们以字符串形式出现,但我已经将它们转换为浮点数。我也知道这一点,因为如果我使用 sum() 函数代替平均函数,它就可以正常工作。

这行代码非常简单:

df.groupby("TIME SENT", as_index=False)['CTR'].mean()

我无法想象为什么 sum 函数会起作用而 mean 函数会失败,尤其是如果错误是上述错误。有人有什么想法吗?

编辑:我用来将 CTR 列从字符串百分比(85.8%)变为浮动的代码:

i = 0

for index, row in df.iterrows():
    df.loc[i, "CTR"] = float(row['CTR'].strip('%'))/100
    i += 1

链接到 df.head() :https://ethercalc.org/zw6xmf2c7auw

标签: pythonpandasnumpy

解决方案


df['CTR']= (df['CTR'].str.strip('%').astype('float'))/100

上面的代码从 CTR 列中删除 %,然后将其类型更改为 float。然后您可以执行 groupby。


推荐阅读