当前位置: 首页 > 面试题库 >

pandas-数据框分组-如何获取多列总和

苏德容
2023-03-14
问题内容

这应该很容易,但是以某种方式我找不到有效的解决方案。

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

index col1   col2   col3   col4   col5
0     a      c      1      2      f 
1     a      c      1      2      f
2     a      d      1      2      f
3     b      d      1      2      g
4     b      e      1      2      g
5     b      e      1      2      g

我想按col1和col2分组并获得sum()col3和col4。 Col5由于无法汇总数据,因此可以删除。

这是输出的样子。我很感兴趣,同时具有col3col4中产生的数据帧。是否col1col2是否属于索引并不重要。

index col1   col2   col3   col4   
0     a      c      2      4          
1     a      d      1      2      
2     b      d      1      2      
3     b      e      2      4

这是我尝试过的:

df_new = df.groupby(['col1', 'col2'])["col3", "col4"].sum()

但是,这只会返回的汇总结果col4

我在这里迷路了。我发现的每个示例仅汇总一列,显然不会发生此问题。


问题答案:

通过使用 apply

df.groupby(['col1', 'col2'])["col3", "col4"].apply(lambda x : x.astype(int).sum())
Out[1257]: 
           col3  col4
col1 col2            
a    c        2     4
     d        1     2
b    d        1     2
     e        2     4

如果你想 agg

df.groupby(['col1', 'col2']).agg({'col3':'sum','col4':'sum'})


 类似资料:
  • 问题内容: 我从CSV文件加载了一些机器学习数据。前两列是观察值,其余两列是要素。 目前,我执行以下操作: 它给出了类似的东西: 我想两个dataframes切片此数据框:包含列一个和和包含一个列,和。 不可能写这样的东西 我不确定最好的方法是什么。我需要吗? 顺便说一下,我发现数据帧索引非常不一致:允许,但不允许。另一方面,不允许,但允许。是否有实际原因?如果列是由Int索引的,这确实令人困惑,

  • 问题内容: 目标 我有一个Pandas数据框,如下所示,具有多个列,并希望获取列的总数。 数据框 -: 我的尝试 : 我试图使用和获得列的总和: 这将导致以下错误: 预期产量 我期望输出如下: 或者,我想编辑一个包含总数的新标题: 问题答案: 您应该使用: 然后与配合使用,在这种情况下,索引应设置为与需要求和的特定列相同: 因为如果传递标量,则将填充所有行的值: 另有两个解决方案,请参见以下应用程

  • 问题内容: 我正在生成许多具有相同形状的数据框,并且我想将它们相互比较。我希望能够获得整个数据框的均值和中位数。 然后,我想获得这两个数据帧的均值。 最简单的方法是什么? 为了澄清一下,当所有数据框的索引和列完全相同时,我想获取每个特定单元的平均值。 因此,在我给出的示例中,平均值为(0.001182 + 0.000001)/ 2 = 0.0005915。 问题答案: 假设两个数据框具有相同的列,

  • 问题内容: 我有一个数据框,类似: 我想在数据框的末尾添加一个“总计”行: 我尝试使用该命令,但最终得到一个Series,尽管可以将其转换回Dataframe,但它不维护数据类型: 我想维护原始数据帧中的数据类型,因为我需要对总行应用其他操作,例如: 问题答案: 将总计行附加到 仅当您有一列字符串或对象时,才需要进行转换。 这是一个脆弱的解决方案,因此我建议仍然坚持对数据框进行操作。例如。

  • 问题内容: 我有一个带有几列的Python pandas数据框。现在,我想将所有值复制到一个列中,以获取一个values_count结果alle值。最后,我需要string1,string2,n的总数。最好的方法是什么? 问题答案: 如果性能是一个问题,请尝试: 或者它变成一个再使用 对于具有少量列的较大(长)DataFrame,循环可能比堆栈快: 此外,还有一个numpy解决方案: 小 长

  • 问题内容: 我想在中设置多列的(我有一个文件,我不得不手动将其解析为列表列表,因为该文件不适合) 我懂了 我可以设置它们的唯一方法是循环遍历每个列变量并使用重铸。 有没有更好的办法? 问题答案: 从0.17开始,您必须使用显式转换: (如下所述,在0.17中已不再使用“魔术”了) 您可以将它们应用于要转换的每一列: 并确认dtype已更新。 适用于大熊猫0.12-0.16的旧/建议答案:您可以用来