使用Python按列分组并汇总另一列的内容
Posted
技术标签:
【中文标题】使用Python按列分组并汇总另一列的内容【英文标题】:Group By a Column and Sum contents of another column with Python 【发布时间】:2016-12-31 04:49:16 【问题描述】:我有一个数据框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
对应的dataframe:
+-----------------+-----------+
| class_energy | sum_time |
+-----------------+-----------+
| low | 63.333333 |
| medium | 0 |
| high | 45.67 |
+-----------------+-----------+
我要做的就是这样使用组:
data.groupby(by=['class_energy'])['sum_time'].sum()
我该怎么做?
【问题讨论】:
【参考方案1】:您可以将所有列添加到[]
以进行聚合:
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_F3','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
【讨论】:
感谢您的支持。我可以编辑您的问题以提高可读性吗?以上是关于使用Python按列分组并汇总另一列的内容的主要内容,如果未能解决你的问题,请参考以下文章