【问题标题】:How do I aggregate this data and create a new column with python & pandas?如何聚合这些数据并使用 python 和 pandas 创建一个新列?
【发布时间】:2016-11-17 17:03:54
【问题描述】:

我正在尝试使用 pandas 来聚合列数据,以便根据数据集中的变量(例如广告尺寸、广告类别广告展示位置等)计算我的数据集中广告的 CPC。 所以在下面的例子中,我将 adCost 和 adClicks 按 adSize 分组(这是一个 1-5 的分类变量)。 如何在数据集中生成一个新列,该列将采用现在汇总的每个 adSize 的 adCost 和每个 adSize 的 adClick 并计算每个 adSize 的每次点击成本? 我将聚合保存到一个变量中,但它没有将它保存到 DataFrame 或我以后可以进一步操作的对象中。我错过了什么或做错了什么?

import pandas as pd
import numpy as np

df = pd.DataFrame(data)

from sklearn import preprocessing
label_encoder = preprocessing.LabelEncoder()

## Convert 'adSize' to categorial values
df['adSize'] = df['adSize']
df['adSize'] = label_encoder.fit_transform(df['adSize'])

agg_calc = {
    'adCost':{
     # work on the "calculation" column
        'total_cost': 'sum', 
        'avg_cost': 'mean'  
    },
    'adClicks':{
        'total_clicks': 'sum',
        'avg_click': 'mean',
        'count': 'count'
    }
}

## Aggregate by adSize
y= df.groupby(['adSize']).aggregate(agg_calc)

感谢您的帮助

【问题讨论】:

    标签: python pandas aggregation


    【解决方案1】:

    您应该可以简单地使用groupby。我没有你的数据,我不完全确定我理解你的问题,但类似下面的东西应该可以工作:

    df['total_cost'] = df.groupby('adSize')['adCost'].transform('sum')
    df['avg_cost'] = df.groupby('adSize')['adCost'].transform('mean')
    df['total_clicks'] = df.groupby('adSize')['adClicks'].transform('sum')
    df['avg_click'] = df.groupby('adSize')['adClicks'].transform('mean')
    df['count'] = df.groupby('adSize')['adClicks'].transform('count')
    

    这就是你要问的吗?

    【讨论】:

    • 我相信您的功能可以解决我想要实现的目标。我的困境是,似乎在 DataFrame 上使用聚合函数时,即使将结果保存到变量中,结果也不会保存或保留。这样我以后就不能操作聚合函数创建的数据,而只能打印输出。我想进一步操作聚合函数的结果,例如除以另一个。我认为您的解决方案效果很好,而且更简单。我想知道这两种方法的目的或区别是什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 2019-05-20
    • 1970-01-01
    • 2016-12-25
    相关资源
    最近更新 更多