当前位置: 首页 > 知识库问答 >
问题:

在dataframe中,如何按单列分组,并将总和应用于多列,以及添加新的总和列?

晋言
2023-03-14

这应该是一个简单的问题,但不知何故,我找不到一个有效的解决方案。

我有一个熊猫数据框,看起来像这样:

Slno   Date         col2   col3   col4   col5  col6
0     01/02/20      2      1      2      5     d
1     03/02/20      5      1      2      4     g
2     04/02/20      5      1      2      5     h
3     05/02/20      4      1      2      6     e
4     08/02/20      8      1      2      5     g
5     05/02/20      8      1      2      8     r

**我想按日期分组,并获得col2、col3、col4、col5行的sum(),作为新的列总数

以下是我尝试过的:

df_new[Total] = df.groupby(['Date', sort=False])["col2", "col3", col4", "col5].sum(axis = 1)

它给出ValueError:传递的项目数错误4,位置意味着1

另外我也尝试过

         df = (df.groupby(['Date'])
         .agg(Total=('ConfirmedIndianNational', 'ConfirmedForeignNational', 'Cured', 'Deaths', 'sum'))
         .reset_index())

它提供TypeError:aggregate()缺少1个必需的位置参数:“arg”

我是新的python,搜索了所有可能的解决方案,但新的用途。

共有3个答案

慕凌龙
2023-03-14

你为什么不做一个简单的:

df[Total] = df.groupby(['Date').col1.sum()+df.groupby(['Date').col2.sum()+df.groupby(['Date').col3.sum()+df.groupby(['Date').col4.sum()

应该没问题。

武卓
2023-03-14

不清楚的是,每个日期有多个值。如果是这种情况,您的group by应该根据您想要的函数来聚合该列,并使用聚合来执行行的总和。

例如,您需要每个日期每列的最大值:

max_df = df.groupby('Date')(['Date'])["col2", "col3", "col4", "col5"].max()

然后:

max_df.loc[:,'sum_cols'] = max_df[["col2", "col3", "col4", "col5"]].sum(axis = 1)

如果每个日期只有一行,则可以执行以下操作:

df.loc[:,'sum_cols'] = df[["col2", "col3", "col4", "col5"]].sum(axis = 1)
柴辰阳
2023-03-14

您可以设置Date为索引,然后取轴=1上的列的总和,然后Groupbylevel=0并转换

df['Total'] = (df.set_index('Date')[["col2", "col3","col4", "col5"]].sum(1)
           .groupby(level=0).transform('sum').to_numpy())
print(df)

   Slno      Date  col2  col3  col4  col5 col6  Total
0     0  01/02/20     2     1     2     5    d     10
1     1  03/02/20     5     1     2     4    g     12
2     2  04/02/20     5     1     2     5    h     13
3     3  05/02/20     4     1     2     6    e     32 # this is duplicated per group
4     4  08/02/20     8     1     2     5    g     16
5     5  05/02/20     8     1     2     8    r     32 # this is duplicated per group
 类似资料:
  • 问题内容: 这应该很简单,但是让我受益匪浅。 我所拥有的只是一个只有两列的表格,如下所示: 等等。 我想计算 每天 的 总字数 -我将它们按日期添加分组并选择WordCount的总和,最后得到语法错误(wordcount必须在group by子句中),但是现在我得到的天数为null 这是我的查询: 这只是选择null。我怎么知道怎么了? 谢谢。 问题答案: 如果您使用该怎么办: 我不明白您为什么还

  • 问题内容: 我正在使用PySpark,并且有一个带有一堆数字列的Spark数据框。我想添加一列,它是所有其他列的总和。 假设我的数据框具有列“ a”,“ b”和“ c”。我知道我可以这样做: 问题是我不想单独键入每列并添加它们,尤其是当我有很多列时。我希望能够自动执行此操作,或者希望通过指定要添加的列名列表来执行此操作。还有另一种方法吗? 问题答案: 这并不明显。我看不到spark Datafra

  • 问题内容: 有没有办法在单个查询中按类别和所有产品的总价获取所有产品的总价。 以下是查询,我正在使用按类别给出价格。 问题答案: 在查询中使用ROLLUP。 GROUP BY子句允许使用WITH 修饰符,从而将多余的行添加到摘要输出中。

  • 我有这样一个数据帧: 现在我需要按ID分组,对于col1和col4列,找到每个ID的和,并将其放入父列附近的一个新列中(例如:col3(sum)),但是对于col2和col3,找到max value。期望输出: 计算这个最简单最快的方法是什么?

  • 给定一个数据帧df1如下: > 我想按Col1,Col2和Col3分组 添加新列计数:每个组的大小 添加新列Col4_sum:各组中每个Col4的总和 输出需求 我试着用 但只获取Count列。

  • 我有一个带有分组变量的数据帧,我想按组对它们求和。使用很容易。 但是现在我想要一个新的列,按组计算n1和n2的总和。这样地: 我如何使用dplyr? 编辑:实际上,这只是一个例子,我有很多变量。 我试过这两个代码,但它不在正确的维度上......