Python按每列分组汇总行数

2024-06-01 07:30:55 发布

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

我遇到了一个问题:

我有一个包含许多行和列的表,如下所示(只是更多的行和列):

比萨饼消费:

df=

+------------------------------------------------------+
|      Name        Day 1 | Day 2 | Day 3 | Day 4 |Day 5|
+------------------------------------------------------+
| Michelangelo   |  1    |   5   |   2   |  1    |   5 |
| Michelangelo   |  4    |   2   |   3   |  1    |   5 |
| Donatello      |  2    |   1   |   1   |  8    |   2 |
| Leonardo       |  3    |   2   |   4   |  2    |   1 |
| Michelangelo   |  3    |   1   |   2   |  1    |   5 |
| Raphael        |  2    |   2   |   3   |  1    |   3 |
| Michelangelo   |  4    |   3   |   1   |  1    |   5 |
+------------------------------------------------------+

我想得到一张表,上面有每只海龟每天的总数,如下所示:

df_总计=

+-------------------------------------------------------+
|      Name        Day 1 | Day 2 | Day 3 | Day 4 | Day 5|
+-------------------------------------------------------+
| Michelangelo   |  13   |   11  |   8   |  4    |   20 |
| Donatello      |  2    |   1   |   1   |  8    |   2  |
| Leonardo       |  3    |   2   |   4   |  2    |   1  |
| Raphael        |  2    |   2   |   3   |  1    |   3  |
+-------------------------------------------------------+

由于我不希望这些名称成为索引,我尝试了(除其他外):

df_total = df.groupby(['Name'], axis = 0).sum().reset_index()

我得到了一个汇总行,选择中的每个字段在该行的每列中汇总成一个巨大的总和。那就是米开朗基罗每天56个比萨饼

谢谢你看


Tags: name名称dfleonardototal汇总行和列海龟
2条回答

试试这个,df.groupby(['Name'], as_index=False).sum()

只需使用pd.DataFrame.groupby.sum而不使用参数axis=0(按行):

df=df.groupby('Name',as_index=False).sum()

输出:

df
           Name  Day 1  Day 2  Day 3  Day 4  Day 5
0     Donatello      2      1      1      8      2
1      Leonardo      3      2      4      2      1
2  Michelangelo     12     11      8      4     20
3       Raphael      2      2      3      1      3

和IIUC,您可以使用pd.DataFrame.sum获得每行(axis=1)的总和:

df['total']=df.sum(axis=1)

输出:

df
           Name  Day 1  Day 2  Day 3  Day 4  Day 5  total
0     Donatello      2      1      1      8      2     14
1      Leonardo      3      2      4      2      1     12
2  Michelangelo     12     11      8      4     20     55
3       Raphael      2      2      3      1      3     11

相关问题 更多 >