0

私は新しい Python ユーザーで、データを操作/集計する方法を学んでいます。

次の形式のサンプル データがあります。

User Date      Price
A    20130101   50
A    20130102    20
A    20130103    30
B    20130201    40
B    20130202    20

等々。

各ユーザーの集計を探しており、次のような平均支出の出力を期待しています。

User  Mean_Spend
A      33
B      30

行ごとに読み取り、1 人のユーザーの集計を取得できましたが、別のユーザーのデータを読み取るのに苦労しています。

さまざまなユーザー向けにファイルを読む方法についての提案は非常に高く評価されています。

ありがとう

4

2 に答える 2

0

パッケージはこれを行います (そしてpandas、さらに多くのことを行います)。dft例として小さなデータセットを使用します。

dft = pandas.DataFrame([[1,2,'a'],[1,2,'b'],[3,1,'b'],[4,1,'a']])
dfg = dft.groupby(dft[2]) # Group by the third column
dfg.mean()

出力:

  0   1
a 2.5 1.5
b 2.0 1.5

これは、それぞれ 0 列目と 1 列目の平均です。

データの形式がわかりません。テキストファイルから読み取るか、python 配列を変換するなどして、pandas データフレームを作成できます。

複数の列でグループ化するか、ユーザーごとの支出の時間傾向を調べるか、または... pandas のクックブックの例がこことそのドキュメントにたくさんあります。

于 2014-05-21T23:48:06.197 に答える
0

コレクションには、 この種の簡単な集計を目的としたCounterオブジェクト (ドキュメント)が含まれています。Dictionary単純に、1 つを使用して支出額を累積し、もう 1 つを使用してトランザクション数を集計し、除算することができます。

from collections import Counter
accumulator =  Counter()
transactions = Counter()

# assuming your input is exactly as shown...
with open('my_foo.txt', 'r') as f:
    f.readline() # skip header line
    for line in f.readlines():
        parts = line.split()
        transactions[parts[0]] += 1
        accumulator[parts[0]]+=int(parts[2])

result = dict((k, float(accumulator[k])/transactions[k]) for k in transactions)
于 2014-05-21T23:27:01.007 に答える