pandas に出くわしましたが、やりたい簡単な計算には理想的です。私はSASのバックグラウンドを持っていて、procfreqを置き換えると考えていました-将来やりたいことにスケールするようです。しかし、私にはできません。簡単な作業に頭を悩ませているようです(pivot/crosstab/indexing
を見ることになっているのかどうかはわかりません-Panel
またはDataFrames
などが必要かどうか。 。)誰かが私に次の方法についていくつかの指針を教えてもらえますか?
2つのCSVファイルがあります(1つは2010年用、もう1つは2011年用-単純なトランザクションデータ)-列はカテゴリと金額です
2010年:
AB,100.00
AB,200.00
AC,150.00
AD,500.00
2011年:
AB,500.00
AC,250.00
AX,900.00
これらは別々のDataFrameオブジェクトにロードされます。
私がやりたいのは、カテゴリ、カテゴリの合計、およびカテゴリの頻度を取得することです。例:
2010年:
AB,300.00,2
AC,150.00,1
AD,500.00,1
2011年:
AB,500.00,1
AC,250.00,1
AX,900.00,1
pivot/crosstab/groupby/an index
などを使用する必要があるかどうかがわかりません...合計または頻度のいずれかを取得できます-両方を取得できないようです...使用するため、少し複雑になります月ごとにやりたいのですが、誰かが親切に正しいテクニックや方向性を教えてくれれば、そこから行けると思います。
内容を含む2010.csvというファイルがあると仮定します
category,value
AB,100.00
AB,200.00
AC,150.00
AD,500.00
次に、適用する機能を使用して groupbyに続く複数の集計関数 、次のように言うことができます。
import pandas
data_2010 = pandas.read_csv("/path/to/2010.csv")
data_2010.groupby("category").agg([len, sum])
次のような結果が得られるはずです
value
len sum
category
AB 2 300
AC 1 150
AD 1 500
Wesは、sumが最適化されていること、およびおそらくnp.sumを使用する必要があることを指摘する可能性が高いことに注意してください。
v0.21
回答
pivot_table
をindex
パラメーターとともに使用します。
df.pivot_table(index='category', aggfunc=[len, sum])
len sum
value value
category
AB 2 300
AC 1 150
AD 1 500
<= v0.12
興味のある人のためにpivot_table
を使用してこれを行うことが可能です:
In [8]: df
Out[8]:
category value
0 AB 100
1 AB 200
2 AC 150
3 AD 500
In [9]: df.pivot_table(rows='category', aggfunc=[len, np.sum])
Out[9]:
len sum
value value
category
AB 2 300
AC 1 150
AD 1 500
結果の列には階層的なインデックスが付けられていることに注意してください。複数のデータ列がある場合、次のような結果が得られます。
In [12]: df
Out[12]:
category value value2
0 AB 100 5
1 AB 200 5
2 AC 150 5
3 AD 500 5
In [13]: df.pivot_table(rows='category', aggfunc=[len, np.sum])
Out[13]:
len sum
value value2 value value2
category
AB 2 2 300 10
AC 1 1 150 5
AD 1 1 500 5
__builtin__.sum
とnp.sum
を使用する主な理由は、後者からNA処理を取得するためです。おそらくPythonビルトインをインターセプトする可能性があり、今それについてメモします。