这是一个简单的数据框:
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...
为什么聚合使用所有列标题集填充数据框?
谢谢, 安
答案 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
你想要完成的是什么?