24

パンダに出くわしましたが、やりたい簡単な計算には理想的です。私は SAS のバックグラウンドを持っていて、proc freq に取って代わると考えていました。将来私がやりたいことに合わせて拡張できるようです。しかし、私は単純なタスクに頭を悩ませることができないようです(見るべきかどうか、またはなどpivot/crosstab/indexingを持っているべきかどうかはわかりません...)。次のことを行う方法について、誰かが私にいくつかの指針を教えてくれますか?PanelDataFrames

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 ...合計または頻度のいずれかを取得できます-両方を取得できないようです...でやりたいので、もう少し複雑になります月ごとですが、誰かが親切に私に正しいテクニック/方向性を教えてくれれば、そこから行くことができると思います.

4

2 に答える 2

16

v0.21答え

パラメータとともに使用pivot_tableindexます:

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__.sumvs.を使用する主な理由np.sumは、後者からNA処理を取得することです。おそらくPythonの組み込みを傍受する可能性があり、それについて今すぐメモします。

于 2012-03-08T19:49:23.657 に答える
12

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 を使用する必要があることを指摘するために来る可能性が高いことに注意してください。

于 2012-03-08T16:08:29.813 に答える