2012-08-09 10 views
7

私は脳をpandasのデータ構造の周りに巻き込み、怒りのように使ってみようとしています。私はgroupby操作がpandasシリーズオブジェクトになることを理解しました。しかし、私は結果のシリーズをどのように使用するかを理解することはできません。特に、私は2つのことをしたい:元のDataFrameに戻る階層インデックスを持つPandasシリーズに参加

1)バック初期DATAFRAMEに結果

2)は、階層的指標に基づいた系列の特定の値を選択して「参加します」。ここで

はで動作するようにおもちゃの例です:

group1 group2 
a  c   2.605 
     d   9.000 
b  d   20.500 
     e   36.000 

理にかなっていること:

import pandas 
df = pandas.DataFrame({'group1': ['a','a','a','b','b','b'], 
         'group2': ['c','c','d','d','d','e'], 
         'value1': [1.1,2,3,4,5,6], 
         'value2': [7.1,8,9,10,11,12] 
}) 
dfGrouped = df.groupby(["group1", "group2"] , sort=True) 

## toy function, obviously not my real function 
def fun(x): return mean(x**2) 

results = dfGrouped.apply(lambda x: fun(x.value1)) 

ので、結果としてシリーズ(結果)は次のようになります。しかし、どのように私はない:

1)は、元のデータフレームdf

2に、このバックに参加)、単一の値、たとえば、グループ1 == 'B' &グループ2を選択== 'D'

答えて

8

値を与えます。

In [9]: df 
Out[9]: 
    group1 group2 value1 value2 
0  a  c  1.1  7.1 
1  a  c  2.0  8.0 
2  a  d  3.0  9.0 
3  b  d  4.0 10.0 
4  b  d  5.0 11.0 
5  b  e  6.0 12.0 

In [10]: results 
Out[10]: 
group1 group2 
a  c   2.605 
     d   9.000 
b  d   20.500 
     e   36.000 

In [11]: df.set_index(['group1', 'group2'], inplace=True)['results'] = results 

In [12]: df 
Out[12]: 
       value1 value2 results 
group1 group2 
a  c   1.1  7.1 2.605 
     c   2.0  8.0 2.605 
     d   3.0  9.0 9.000 
b  d   4.0 10.0 20.500 
     d   5.0 11.0 20.500 
     e   6.0 12.0 36.000 

In [13]: df.reset_index() 
Out[13]: 
    group1 group2 value1 value2 results 
0  a  c  1.1  7.1 2.605 
1  a  c  2.0  8.0 2.605 
2  a  d  3.0  9.0 9.000 
3  b  d  4.0 10.0 20.500 
4  b  d  5.0 11.0 20.500 
5  b  e  6.0 12.0 36.000 
+1

私は何をしようとしていたかのように見えます。これは、インデックスの設定方法の良い例です。私はその仕組みが分からなかった。 –

+0

@wouter-overmeire - 非常に良い。私は今日これで苦労していた。 – John

+0

@wouter-overmeire、@ jd-long - 複数の結果をDataFrameに追加し直さなければならなかった場合、どのように動作しますか?たとえば、2つの別々の機能(例: 'def UCL(x):return mean(x2)+ np.std * 2'と' def LCL(x):return mean(x2)-np.std * 2'はdfに返されますか?それとも良い方法がありますか? – John

3

周りmonkeyingながら私は#2に答えを発見した。

results["b","d"]は、残りの#1のためにそう私にgroup1に== 'B' &グループ2 == 'D'

関連する問題