如何汇总这些数据并使用 python & pandas 创建一个新列?
How do I aggregate this data and create a new column with python & pandas?
我正在尝试使用 pandas 聚合列数据,以便根据数据集中的变量(例如广告尺寸、广告类别广告展示位置等)计算数据集中广告的每次点击费用.
因此,在下面的案例中,我将按 adSize(这是 1-5 的分类变量)对 adCost 和 adClicks 进行分组。
我如何在数据集中生成一个新列,该列将采用现在聚合的每个广告尺寸的广告成本和每个广告尺寸的广告点击并计算每个广告尺寸的每次点击成本?
我将聚合保存到一个变量中,但它没有将它保存到 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)
感谢您的协助
您应该能够简单地使用 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')
你问的是这个吗?
我正在尝试使用 pandas 聚合列数据,以便根据数据集中的变量(例如广告尺寸、广告类别广告展示位置等)计算数据集中广告的每次点击费用. 因此,在下面的案例中,我将按 adSize(这是 1-5 的分类变量)对 adCost 和 adClicks 进行分组。 我如何在数据集中生成一个新列,该列将采用现在聚合的每个广告尺寸的广告成本和每个广告尺寸的广告点击并计算每个广告尺寸的每次点击成本? 我将聚合保存到一个变量中,但它没有将它保存到 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)
感谢您的协助
您应该能够简单地使用 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')
你问的是这个吗?