我有一个像这样的Python blaze数据
import blaze as bz
bdata = bz.Data([(1, 'Alice', 100.9, 100),
(2, 'Bob', 200.6, 200),
(3, 'Charlie', 300.45, 300),
(5, 'Edith', 400, 400)],
fields=['id', 'name', 'revenue', 'profit'])
我想计算数字列的平均值。我尝试过这样的事情
print {col: bdata[col].mean() for col in ['revenue', 'profit']}
我明白了
{'profit': 250.0, 'revenue': 250.4875}
但我想像 pandas
那样一次性计算,例如 data.mean()
有什么想法或建议吗???
最佳答案
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()
关于python blaze计算多列的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34860649/