熊猫集团有特殊金额

问题描述 投票:1回答:2

假设我有这样的数据,我想根据功能和类型对它们进行分组。

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

我很难找到一种方法来做到这一点。我需要一些帮助谢谢

python pandas pandas-groupby
2个回答
3
投票

使用set_indexMultiIndex然后使用transformsum通过聚合函数返回相同长度的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

0
投票

这是一种方式:

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
© www.soinside.com 2019 - 2024. All rights reserved.