加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

使用python将另一列的列和总和内容分组

发布时间:2020-12-16 22:56:30 所属栏目:Python 来源:网络整理
导读:我有一个数据框merged_df_energy: +------------------------+------------------------+------------------------+--------------+| ACT_TIME_AERATEUR_1_F1 | ACT_TIME_AERATEUR_1_F3 | ACT_TIME_AERATEUR_1_F5 | class_energy |+-----------------------
我有一个数据框merged_df_energy:
+------------------------+------------------------+------------------------+--------------+
| ACT_TIME_AERATEUR_1_F1 | ACT_TIME_AERATEUR_1_F3 | ACT_TIME_AERATEUR_1_F5 | class_energy |
+------------------------+------------------------+------------------------+--------------+
| 63.333333              | 63.333333              | 63.333333              | low          |
| 0                      | 0                      | 0                      | high         |
| 45.67                  | 0                      | 55.94                  | high         |
| 0                      | 0                      | 23.99                  | low          |
| 0                      | 20                     | 23.99                  | medium       |
+------------------------+------------------------+------------------------+--------------+

我想为每个ACT_TIME_AERATEUR_1_Fx(ACT_TIME_AERATEUR_1_F1,ACT_TIME_AERATEUR_1_F3和ACT_TIME_AERATEUR_1_F5)创建一个包含以下列的数据帧:class_energy和sum_time

例如,对应于ACT_TIME_AERATEUR_1_F1的数据框:

+-----------------+-----------+
|  class_energy   | sum_time  |
+-----------------+-----------+
| low             | 63.333333 |
| medium          | 0         |
| high            | 45.67     |
+-----------------+-----------+

我要做的事情我应该像这样使用组:

data.groupby(by=['class_energy'])['sum_time'].sum()

有什么好主意帮我吗?

解决方法

您可以将所有列添加到[]以进行聚合:
print (df.groupby(by=['class_energy'])['ACT_TIME_AERATEUR_1_F1','ACT_TIME_AERATEUR_1_F3','ACT_TIME_AERATEUR_1_F5'].sum())
              ACT_TIME_AERATEUR_1_F1  ACT_TIME_AERATEUR_1_F3  
class_energy                                                   
high                       45.670000                0.000000   
low                        63.333333               63.333333   
medium                      0.000000               20.000000   

              ACT_TIME_AERATEUR_1_F5  
class_energy                          
high                       55.940000  
low                        87.323333  
medium                     23.990000

你也可以使用参数as_index = False:

print (df.groupby(by=['class_energy'],as_index=False)['ACT_TIME_AERATEUR_1_F1','ACT_TIME_AERATEUR_1_F5'].sum())
  class_energy  ACT_TIME_AERATEUR_1_F1  ACT_TIME_AERATEUR_1_F3  
0         high               45.670000                0.000000   
1          low               63.333333               63.333333   
2       medium                0.000000               20.000000   

   ACT_TIME_AERATEUR_1_F5  
0               55.940000  
1               87.323333  
2               23.990000

如果只需要汇总前3列:

print (df.groupby(by=['class_energy'],as_index=False)[df.columns[:3]].sum())
  class_energy  ACT_TIME_AERATEUR_1_F1  ACT_TIME_AERATEUR_1_F3  
0         high               45.670000                0.000000   
1          low               63.333333               63.333333   
2       medium                0.000000               20.000000   

   ACT_TIME_AERATEUR_1_F5  
0               55.940000  
1               87.323333  
2               23.990000

…或没有最后的所有列:

print (df.groupby(by=['class_energy'],as_index=False)[df.columns[:-1]].sum())
  class_energy  ACT_TIME_AERATEUR_1_F1  ACT_TIME_AERATEUR_1_F3  
0         high               45.670000                0.000000   
1          low               63.333333               63.333333   
2       medium                0.000000               20.000000   

   ACT_TIME_AERATEUR_1_F5  
0               55.940000  
1               87.323333  
2               23.990000

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读