我有像这样的python大火数据
print {col: bdata[col].mean() for col in ['revenue', 'profit']}
我想计算数字列的平均值。我试过这样的事情
{'profit': 250.0, 'revenue': 250.4875}
我得到了
pandas
但我想像data.mean()
一样在单张照片中进行计算,例如vi /etc/spark/conf/spark-defaults.conf
任何想法或建议???
答案 0 :(得分:2)
Pandas聚合有点神奇,我不认为你能够在没有某种逻辑的情况下跳过非数字列。
如果您可以选择添加虚拟列,则可以使用by
在整个表格中进行聚合。
看起来像这样:
bdata = bz.Data([('fnord', 1, 'Alice', 100.9, 100),
('fnord', 2, 'Bob', 200.6, 200),
('fnord', 3, 'Charlie', 300.45, 300),
('fnord', 5, 'Edith', 400, 400)],
fields=['dummy', 'id', 'name', 'revenue', 'profit'])
bz.by(bdata.dummy, avg_profit=bdata.profit.mean(), avg_revenue=bdata.revenue.mean())
dummy avg_profit avg_revenue
0 fnord 250 250.4875
虽然这并不是特别明确,但也需要修改数据。
您可以使用odo
快速访问简明的Pandas语法:
from odo import odo
import Pandas as pd
odo(bdata, pd.DataFrame).mean()
答案 1 :(得分:0)
我认为使用summary
缩减可能会有更好的运气:
from blaze import *
resume = summary(bdata,avg_profit=bdata.profit.mean(), avg_revenue=bdata.revenue.mean())
SummaryStats = pd.DataFrame(pd.Series(dict( (k,v) for k,v in zip(resume.fields,compute(resume)) ))).T
如果你不关心结果是compute(resume)
,最后一行可以减少到pd.DataFrame
。