2

一部のデータに対して集計を実行したいのですが、完了したら、集計を集計を構成した行にリンクして戻します。

df = pd.DataFrame({"vehicle":  ['car','bus','bus' ,'car','bus'],
               "colour" :  ['red','red','blue','red','blue'],
               "weight" :  [ 1,    14,   10,    2,    12]
            })

grouped = df.groupby(["vehicle", "colour"], as_index=False)
print grouped.agg({"weight":"sum"})

vehicle colour  weight
0     bus   blue      22
1     bus    red      14
2     car    red       3

集計を表示したい場合、上記の集計データを反復処理できます。ただし、特定の集計を構成する行を決定/表示できるようにしたいと考えています。つまり、赤い車の集合体が元のデータ セットの行 0 と行 3 で構成されていることを効率的に判断できる必要があります。

最終的には、この関係をファイルに保持したいと考えていますが、これが 1 つの結合されたデータセットで達成できるかどうか、または 2 つの別個のデータ セットが必要かどうかはわかりません。元のデータの行

私の主な質問は、元のデータセットの行 0 と 3 で構成される赤い車 = 3 をどのように決定するかです。

助けてくれてありがとう、マーカス

4

2 に答える 2

0

グループ ディクショナリを使用できます。

In [11]: grouped.groups[('car', 'red')]
Out[11]: [0, 3]

In [12]: df.loc[grouped.groups[('car', 'red')]]
Out[12]:
  colour vehicle  weight
0    red     car       1
3    red     car       2

一般に、これはラベルを返すため(整数の位置ではありません)、少し注意する必要があります。
ラベルを使用するため、このソリューションは繰り返しインデックスで失敗するため、インデックス ディクショナリ (整数の場所を使用) を使用することをお勧めします。

In [21]: df.index = list('abcdd')

上記の解決策が失敗することを確認します (インデックスの繰り返しのため)。

In [22]: grouped.groups[('car', 'red')]
Out[22]: ['a', 'd']

In [23]: df.loc[grouped.groups[('car', 'red')]]
Out[23]:
  colour vehicle  weight
a    red     car       1
d    red     car       2
d   blue     bus      12

しかし、インデックス (整数位置) を使用すると、問題なく動作します。

In [24]: grouped.indices[('car', 'red')]
Out[24]: array([0, 3])

In [25]: df.iloc[grouped.indices[('car', 'red')]]
Out[25]:
  colour vehicle  weight
a    red     car       1
d    red     car       2
于 2013-09-17T22:38:10.113 に答える
0

join元のデータフレームと結果の集計データの間に操作を適用できます。

key_cols = ["Date", "TextA", "TextB"]
grouped = data.groupby(key_cols)
data.join(grouped.agg({"NumberA":"sum", "NumberB": "min"}), on=key_cols, rsuffix='_agg')
于 2013-09-17T10:41:44.483 に答える