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 回答