6

DataFrame の使用 (pandas は pd、numpy は np):

test = pd.DataFrame({'A' : [10,11,12,13,15,25,43,70],  
                     'B' : [1,2,3,4,5,6,7,8],  
                     'C' : [1,1,1,1,2,2,2,2]})


In [39]: test
Out[39]: 
    A  B  C
0  10  1  1
1  11  2  1
2  12  3  1
3  13  4  1
4  15  5  2
5  25  6  2
6  43  7  2
7  70  8  2

DF を「C」でグループ化し、np.mean (合計、最小、最大) で集計すると、グループ内で列単位の集計が生成されます。

In [40]: test_g = test.groupby('C')

In [41]: test_g.aggregate(np.mean)
Out[41]: 
       A    B
C            
1  11.50  2.5
2  38.25  6.5

ただし、 np.median を使用して集計すると、グループ内で DataFrame ごとの集計が生成されるようです。

In [42]: test_g.aggregate(np.median)
Out[42]: 
      A     B
C            
1   7.0   7.0
2  11.5  11.5

(ただし、groupby.medianメソッドを使用すると、列ごとに期待される結果が得られるようです)

次の問題に対処していただければ幸いです。

  1. そのような結果の理由/メカニズムは何ですか?
  2. この動作が確認された場合、グループ化の集約に関する推奨される「ベスト プラクティス」にどのような影響がありますか? 他の集計関数はこのように機能しますか?
4

4 に答える 4

2

また、回避策として、pandas には一般的な操作のショートカット メソッドがあることに注意してください。

In [12]: test.groupby('C').mean()
Out[12]: 
       A    B
C            
1  11.50  2.5
2  38.25  6.5

In [13]: test.groupby('C').median()
Out[13]: 
      A    B
C           
1  11.5  2.5
2  34.0  6.5

sum、mean、median、max、min、first、last、std などについては、メソッドを直接呼び出すことができ、apply-to-DataFrame-but-failover-to-each-column メカニズムについて心配する必要はありません。 GroupBy エンジン。

于 2012-09-30T00:42:15.470 に答える