2

ここに単純なデータフレームがあります:

   Acid  Balance_1  CustID  Balance_2
0     1   0.082627       1        NaN
1     2   0.397579       1   0.459942
2     3   0.201596       2   0.596573
3     4   0.616448       3   0.705697
4     5   0.844865       3   0.483279
5     6        NaN       4   0.360260

CustID でグループ化した後、集計関数をいじってみました。

groupby_obj = time_series.groupby(["CustID"])
df = groupeby_obj.agg(set)

これは戻ります

                                             Acid  \
CustID                                              
1       set([Balance_1, Balance_2, Acid, CustID])   
2       set([Balance_1, Balance_2, Acid, CustID])   
3       set([Balance_1, Balance_2, Acid, CustID])   
4       set([Balance_1, Balance_2, Acid, CustID])   

                                        Balance_1  \
CustID                                              
1       set([Balance_1, Balance_2, Acid, CustID])   
2       set([Balance_1, Balance_2, Acid, CustID])   
3       set([Balance_1, Balance_2, Acid, CustID])   
4       set([Balance_1, Balance_2, Acid, CustID])   

                                        Balance_2  
CustID                                             
1       set([Balance_1, Balance_2, Acid, CustID])  
2       set([Balance_1, Balance_2, Acid, CustID])  
3       set([Balance_1, Balance_2, Acid, CustID])  
4       set([Balance_1, Balance_2, Acid, CustID])  

私が考えていたことの代わりに:

        Acid         Balance_1                    Balance_2
CustID                            
1       set([1,2])   set([0.082627, 0.397579])    set([NaN, 0.459942])
    etc for the other CustIDs...

集計がすべての列ヘッダーのセットでデータ フレームを埋めているのはなぜですか?

ありがとう、アン

4

1 に答える 1

1

これがあなたのフレームです

In [29]: df
Out[29]: 
   Acid  Balance_1  CustID  Balance_2
0     1   0.082627       1        NaN
1     2   0.397579       1   0.459942
2     3   0.201596       2   0.596573
3     4   0.616448       3   0.705697
4     5   0.844865       3   0.483279
5     6        NaN       4   0.360260

作成したグループは次のとおりです

In [24]: df.groupby(['CustID']).groups
Out[24]: {1: [0, 1], 2: [2], 3: [3, 4], 4: [5]}

関数に何が渡されているかを確認する方法は次のとおりです(フレーム)

In [25]: df.iloc[[0,1]]
Out[25]: 
   Acid  Balance_1  CustID  Balance_2
0     1   0.082627       1        NaN
1     2   0.397579       1   0.459942

In [26]: df.iloc[[2]]
Out[26]: 
   Acid  Balance_1  CustID  Balance_2
2     3   0.201596       2   0.596573

そして、これがフレームでのセット操作の動作です(列のリストが返されます)。これはあまり興味深い/有用な操作ではありません

In [27]: set(df.iloc[[2]])
Out[27]: set(['Balance_1', 'Balance_2', 'Acid', 'CustID'])

aggのポイントは、渡されたフレームをシリーズと言うように集約することです。あなたの操作は入力の次元を減らすべきです

In [28]: df.groupby(['CustID']).agg(lambda x: x.sum())
Out[28]: 
        Acid  Balance_1  Balance_2
CustID                            
1          3   0.480206   0.459942
2          3   0.201596   0.596573
3          9   1.461313   1.188976
4          6        NaN   0.360260

あなたは何を達成しようとしていますか?

于 2013-07-31T15:59:50.453 に答える