7

私は自分の脳をpandasデータ構造に巻き付けようとしていて、それらを少し怒って使用しようとしています。groupby操作の結果、パンダシリーズオブジェクトが生成されることがわかりました。しかし、結果のシリーズを使用する方法がよくわかりません。具体的には、次の 2 つのことを行いたいと考えています。

1) 結果を最初の DataFrame に「結合」します。

2) 階層インデックスに基づいて、結果のシリーズから特定の値を選択します。

操作するおもちゃの例を次に示します。

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))

結果のシリーズ(結果)は次のようになります。

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

それは理にかなっている。しかし、どうすればいいですか:

1) これを元の DataFrame に結合しますdf

2) たとえば、group1=='b' & group2=='d' の単一の値を選択します。

4

2 に答える 2

8

残りの#1についてです。

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
于 2012-08-09T15:09:37.260 に答える
3

いじり回しているうちに、#2への答えを発見しました。

results["b","d"]group1=='b' & group2=='d' の値が得られます

于 2012-08-09T14:50:15.993 に答える