Agreggate sum和averaga在熊猫中保留列

时间:2018-07-11 00:31:47

标签: python pandas

我有一个包含整数值和百分比的DF,如下面的m粘贴所示,其中一些百分比值为NaN。

            total  sent  delivered  opens   open_rate  click_rate  click_to_open_rate
2018-06-20      1     0          0      0         NaN         NaN                 NaN
2018-06-22      1     1          0      0         0.5         NaN                 NaN
2018-06-25      1     1          0      0         0.5         1.0                 NaN
2018-07-02      2     2          1      0         0.0         0.0                 NaN

我需要一种汇总这些数据的方法,以保留列名并累加整数值(列total, send, delivered, opens)和平均列百分比(open_rate, click_rate, click_to_open_rate

如果我只是执行df.sum()df.agg('sum'),我将获得没有列名的数据,因为稍后我会将其转储到带有to_dict的字典中。

我希望得到:

{
    total:                 5,
    sent:                  4,
    delivered:             1,
    opens:                 0,
    open_rate:             0.25,
    click_rate:            0.25,
    click_to_open_rate:    0.0
}

2 个答案:

答案 0 :(得分:1)

不确定是不是您想要的,诀窍是将聚合函数放入[]

import numpy as np
import pandas as pd

df = pd.DataFrame(np.arange(15).reshape(-1, 3), columns=list('abc'))

print(df.agg([sum]))
#      a   b   c
# sum  30  35  40

print(df.agg([sum, np.mean]))
#          a     b     c
# sum   30.0  35.0  40.0
# mean   6.0   7.0   8.0

答案 1 :(得分:0)

我认为您需要

sum_columns=['total','sent','delivered','opens']
mean_columns=['open_rate','click_rate','click_to_open_rate']
output=df[sum_columns].sum().append(df[mean_columns].fillna(0).mean()).to_dict()
print(output)
{ 
 'click_rate': 0.25,
 'click_to_open_rate': 0.0,
 'delivered': 1.0,
 'open_rate': 0.25,
 'opens': 0.0,
 'sent': 4.0,
 'total': 5.0
}