对某些列执行groupby.sum,对其他列执行groupby.mean

马丁·布希耶(Martin Bouhier)

使用我的代码,我在csv中得到了一些结果,是正确的,问题是我需要mean()删除两列,因为我不知道为什么我可以对一些列求和而对其他列求和。

我添加了更具体的csv文本和我的输出。另外,我正在寻找的输出!

码:

"""Calculate"""
# encoding=utf8

import pandas as pd

dfh = pd.read_csv("este_mes.csv", sep=',')
h = dfh['Fecha'].max()
dfh['Cliente'] = dfh['Cliente'] + "," + h
dfh = dfh.groupby(['Cliente']).sum()

frames = [dfh]

results2 = pd.concat(frames)
results2 = results2.drop('Fill_rate', 1)
results2 = results2.drop('ECPM_medio', 1)
results2.to_csv("Cliente_x_mes.csv", sep=',', index=True)
results2 = pd.read_csv("Cliente_x_mes.csv", sep=',')

CSV:

Cliente,Fecha,Status,cl_fecha,Subastas,Impresiones_exchange,Fill_rate,Importe_a_pagar_a_medio,ECPM_medio
jjj,01/01/2018,Alerta Revenue: aumento Subastadas - descenso eCPM y Fillrate,jjj_01/01/2018,1930916,53231,2.76,17.32,0.33
jjj,02/01/2018,Alerta Fillrate -- Incremento Revenue - Imp Vendidas - Subastadas,jjj_02/01/2018,5930774,98181,1.66,33.2,0.34
jjj,03/01/2018,Estable,jjj_03/01/2018,5487499,97782,1.78,33.37,0.34
jjj,04/01/2018,Estable,jjj_04/01/2018,5254018,98039,1.87,32.95,0.34
jjj,05/01/2018,Estable,jjj_05/01/2018,4904150,98068,2.0,31.58,0.32
jjj,06/01/2018,Alerta Revenue - Imp Vendidas - Subastadas -- Incremento Fillrate: descenso eCPM,jjj_06/01/2018,4904150,98068,2.0,31.58,0.32
kkk,01/01/2018,Alerta Fillrate - Revenue - Imp Vendidas,kkk_01/01/2018,30668,4464,14.56,3.87,0.87
kkk,02/01/2018,Incremento Imp Vendidas - Subastadas: descenso eCPM,kkk_02/01/2018,41032,5707,13.91,4.06,0.71
kkk,03/01/2018,Estable,kkk_03/01/2018,39847,5331,13.38,3.72,0.7
kkk,04/01/2018,Estable: descenso Imp Vendidas,kkk_04/01/2018,37403,4733,12.65,3.37,0.71
kkk,05/01/2018,Estable: descenso Fillrate,kkk_05/01/2018,40330,4473,11.09,3.35,0.75
kkk,06/01/2018,Estable: descenso Subastadas y aumento Fillrate,kkk_06/01/2018,32797,4050,12.35,3.22,0.8

输出:

Cliente,Subastas,Impresiones_exchange,Importe_a_pagar_a_medio
"jjj,10/01/2018",44367734,946163,303.14
"kkk,10/01/2018",382800,47851,36.47

我需要的输出:

Cliente,Subastas,Impresiones_exchange,Importe_a_pagar_a_medio,Fill_rate,ECPM_medio
"jjj,10/01/2018",44367734,946163,303.14,30,0.331666667
"kkk,10/01/2018",382800,47851,36.47,3.598333333,0.756666667

另一方面,如果您的输出只能有2个小数位,那就太好了

cs95

选项1
将您的分组代码分为两个阶段。首先,创建一个groupby对象,然后为适当的列计算总和/平均值。

m = ['Fill_rate', 'ECPM_medio']        # columns to calculate mean for
s = df.columns.difference(m).tolist()  # columns to calculate sum for

另一种查找方式s(仅适用于数字列)-

s = df.columns[df.dtypes != object].difference(m).tolist()

下一个,

# Stage 1
g = df.groupby('Cliente')   

# Stage 2
i = g[s].sum()
j = g[m].mean()

# concatenate results, and save to CSV
pd.concat([i, j], 1).to_csv('Cliente_x_mes.csv')

细节

i

         Importe_a_pagar_a_medio  Impresiones_exchange  Subastas
Cliente                                                         
jjj                       180.00                543369  28411507
kkk                        21.59                 28758    222077

j

         Fill_rate  ECPM_medio
Cliente                       
jjj       2.011667    0.331667
kkk      12.990000    0.756667

选项2
另一种方法是构建dict函数,然后将其传递给groupby.agg-

f = dict.fromkeys(m, 'mean')
f.update(dict.fromkeys(, 'sum'))

df.groupby('Cliente').agg(f).to_csv('Cliente_x_mes.csv')

Cilente_x_mes.csv

Cliente,Importe_a_pagar_a_medio,Impresiones_exchange,Subastas,Fill_rate,ECPM_medio
jjj,180.0,543369,28411507,2.0116666666666667,0.3316666666666667
kkk,21.59,28758,222077,12.99,0.7566666666666667

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

熊猫Groupby Mean与Nan

python groupby,然后某些列保持第一,其他列保持最后

当与groupby一起使用sum()时,Python保留其他列

执行pandas.DataFrame.groupby()。sum()时保留非数字列

快速高效的熊猫Groupby sum / mean,无聚合

从Groupby创建新的Pandas列并划分其他列

有没有一种方法可以使用groupby.sum并保留其他列?

熊猫groupby列以列出并保留某些值

执行groupby求和后保留multindex列结构

执行groupby函数时如何获取列的值

使用groupby和mean()在Pandas中保留带有分类变量的列

如何在Groupby中保留其他列的行值?

熊猫groupby:计算满足其他列条件的行?

如何使用groupby对象获取其他列的总和?

如何从'groupby'和'mean'函数绘制直方图

熊猫groupby(...)。mean()丢失密钥

熊猫groupby mean()不忽略NaN

忽略nan列的Pandas mean()

从pandas .mean()中排除列

如何对列表执行GroupBy Sum查询?

添加两列,即 mean_a和mean_b

熊猫groupby和sum,同时保留其他属性

执行聚合函数时如何检索其他列?

熊猫:如何在函数内将sum()或mean()分配给df.groupby?

如何在groupby中使用字符串“ mean”或“ sum”使之动态?

如何基于多个其他列groupby重复总结一列

groupby 1列和其他列的总和作为新的数据框熊猫

熊猫-基于groupby中其他列设置列的最佳方法

对列进行Groupby以获得计数,同时保留所有其他列不变