假设我有这样的数据,我想根据功能和类型对它们进行分组。
feature type size
Alabama 1 100
Alabama 2 50
Alabama 3 40
Wyoming 1 180
Wyoming 2 150
Wyoming 3 56
当我申请df=df.groupby(['feature','type']).sum()[['size']]
时,我按预期得到了这个。
size
(Alabama,1) 100
(Alabama,2) 50
(Alabama,3) 40
(Wyoming,1) 180
(Wyoming,2) 150
(Wyoming,3) 56
但是我想要只使用相同类型而不是类型和功能的大小。虽然这样做我想保持索引作为(功能,类型)元组。我的意思是我想得到这样的东西,
size
(Alabama,1) 280
(Alabama,2) 200
(Alabama,3) 96
(Wyoming,1) 280
(Wyoming,2) 200
(Wyoming,3) 96
我很难找到一种方法来做到这一点。我需要一些帮助谢谢
使用set_index
为MultiIndex
然后使用transform
与sum
通过聚合函数返回相同长度的Series
:
df = df.set_index(['feature','type'])
df['size'] = df.groupby(['type'])['size'].transform('sum')
print (df)
size
feature type
Alabama 1 280
2 200
3 96
Wyoming 1 280
2 200
3 96
编辑:首先聚合两列,然后使用transform
df = df.groupby(['feature','type']).sum()
df['size'] = df.groupby(['type'])['size'].transform('sum')
print (df)
size
feature type
Alabama 1 280
2 200
3 96
Wyoming 1 280
2 200
3 96
这是一种方式:
df['size'] = df['type'].map(df.groupby('type')['size'].sum())
df.groupby(['feature', 'type'])['size_type'].sum()
# feature type
# Alabama 1 280
# 2 200
# 3 96
# Wyoming 1 280
# 2 200
# 3 96
# Name: size_type, dtype: int64