我有一个包含整数值和百分比的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
}
答案 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
}