pandas dataframe aggregate - 为什么它会返回列名?

时间:2013-07-31 15:50:28

标签: python pandas

这是一个简单的数据框:

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

为什么聚合使用所有列标题集填充数据框?

谢谢, 安

1 个答案:

答案 0 :(得分: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

以下是set操作对框架的作用(您返回列的列表) 它不是一个非常有趣/有用的操作

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

聚合点是将传递的帧聚合成一个系列。你的操作 应该减少输入维度

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

你想要完成的是什么?