特殊金额PandasGroupBy

2024-05-15 22:02:51 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我一直在想办法解决这个问题。我需要帮助谢谢


Tags: 数据类型dfsizetype特征featuresum
2条回答

使用^{}表示MultiIndex,然后使用^{}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

相关问题 更多 >