1

私はこのようなPythonブレイズデータを持っています

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}

のように一発で計算したいのですがpandasdata.mean()

考えや提案はありますか?

4

2 に答える 2

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()
于 2016-01-22T20:04:29.560 に答える
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.

于 2016-02-05T18:58:35.210 に答える