Python Pandsグループ統合の実現方法


Pycharmマウスは関数に移動し、CTRL+Qは文書を素早く調べ、CTR+Pは基本的なパラメータを見ることができます。
appy()、appymap()とmap()
appy()とappymap()はDataFrameの関数で、map()はSeriesの関数です。
apply()の操作対象はDataFrameの一行または一列のデータであり、appymap()はDataFrameの各要素である。map()もSeriesの各要素です。
apple()はdataframeの内容を一括処理します。これはサイクルより早いです。df.apply(func,axis=0,...)Fnc:定義された関数,axis=0の場合は列操作,=1の場合は行操作です。
map()とpython内に建てられたのは違いがありません。df[one'.map(sqrt)のようです。

import numpy as np

from pandas import Series, DataFrame

 

frame = DataFrame(np.random.randn(4, 3),

         columns = list('bde'),

         index = ['Utah', 'Ohio', 'Texas', 'Oregon'])

print frame

print np.abs(frame)

print

 

f = lambda x: x.max() - x.min()

print frame.apply(f)

print frame.apply(f, axis = 1)

def f(x):

  return Series([x.min(), x.max()], index = ['min', 'max'])

print frame.apply(f)

print

 

print 'applymap map'

_format = lambda x: '%.2f' % x

print frame.applymap(_format)

print frame['e'].map(_format) 
Group by
GroupbyはPandsの中で最も一般的で効果的なグループ関数で、sum()、count()、mean()などの統計関数があります。
groupby方法で戻ってきたDataFrame GroupByオブジェクトは、実際にはデータコンテンツを含んでいません。それはdf[key 1']の中間データを記録しています。パケットデータに関数または他の統合演算を適用すると、パンdasはグループ化されたbyオブジェクト内に記録された情報に基づいてdfを高速にブロック分けして演算し、結果を返します。

df = DataFrame({'key1': ['a', 'a', 'b', 'b', 'a'],

        'key2': ['one', 'two', 'one', 'two', 'one'],

        'data1': np.random.randn(5),

        'data2': np.random.randn(5)})

grouped = df.groupby(df['key1'])

print grouped.mean() 



df.groupby(lambda x:'even' if x%2==0 else 'odd').mean() #       
重合agg()
グループのある列(行)または複数の列(行、axis=0/1)に対して、agg(func)を適用して、パケット後のデータにfunc関数を適用することができます。例えば、grouped['data 1']で、agg('mean')もグループ後の'data 1'列に対して平均値を求める。もちろん、複数の列(行)と複数の関数を同時に使用することもできます。

df = DataFrame({'key1': ['a', 'a', 'b', 'b', 'a'],

        'key2': ['one', 'two', 'one', 'two', 'one'],

        'data1': np.random.randn(5),

        'data2': np.random.randn(5)})

grouped = df.groupby('key1')

print grouped.agg('mean')

 

     data1   data2

key1          

a   0.749117 0.220249

b  -0.567971 -0.126922 
apply()とagg()は機能的にほぼ同じで、apply()は通常、異なるパケットの欠落データのパディングとtop Nの計算を処理するために使用され、階層的な索引を生成する。
一方、aggは複数の関数を同時に導入して、異なる列に作用することができる。

df = DataFrame({'key1': ['a', 'a', 'b', 'b', 'a'],

        'key2': ['one', 'two', 'one', 'two', 'one'],

        'data1': np.random.randn(5),

        'data2': np.random.randn(5)})

grouped = df.groupby('key1')

print grouped.agg(['sum','mean'])
print grouped.apply(np.sum)  #apply        ,        ,             。 
         ダタ1               ダタ2         
           sum      メン       sum      メン
key 1                                       
a.     2.80273  0.926758-1.61696-0.5555
b    -0.323-0.54160-1.82162-0.6981
         ダタ1     data 2 key 1       key 2
key 1                                   
a.     2.80273-1.61696  aa  onetwoone
b    -0.82320-1.3682   bb。     onetwo
アプリとaggは基本的に近い機能ですが、複数の関数の場合はaggが便利です。
apply自体の自由度が高く、グループに分けてから重合をしないようにすることは観察の場です。

print grouped.apply(lambda x: x.describe())

 

        data1   data2

key1             

a  count 3.000000 3.000000

   mean -0.887893 -1.042878

   std  0.777515 1.551220

   min  -1.429440 -2.277311

   25%  -1.333350 -1.913495

   50%  -1.237260 -1.549679

   75%  -0.617119 -0.425661

   max  0.003021 0.698357

b  count 2.000000 2.000000

   mean -0.078983 0.106752

   std  0.723929 0.064191

   min  -0.590879 0.061362

   25%  -0.334931 0.084057

   50%  -0.078983 0.106752

   75%  0.176964 0.129447

   max  0.432912 0.152142 
また、appyは、リターンデータの次元を変更することもできます。
http://pandas.pydata.org/pandas-docs/stable/groupby.html
このほかに、透視表ピvot_もあります。テーブル、クロステーブルcrosstabですが、使ったことがありません。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。