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

熊猫数据框,我如何可以分组由多个列,并应用和特定列和添加新的计数列?

蒋哲
2023-03-14

给定一个数据帧df1如下:

Col1    Col2    Col3    Col4    Col5
-------------------------------------
A       1       AA      10      Test1
A       1       AA      5       Test2
A       2       AB      30      Test3
B       4       FF      10      Test4
C       1       HH      4       Test7
C       3       GG      6       Test8
C       3       GG      7       Test9
D       1       AA      4       Test5
D       3       FF      6       Test6

>

  • 我想按Col1,Col2和Col3分组

    添加新列计数:每个组的大小

    添加新列Col4_sum:各组中每个Col4的总和

    输出需求

    Col1    Col2    Col3    Count   Col4_sum
    ----------------------------------------
    A       1       AA      2       15
    A       2       AB      1       30
    B       4       FF      1       10
    C       1       HH      1       4
    C       3       GG      2       13
    D       1       AA      1       4
    D       3       FF      1       6
    

    我试着用

    df1.groupby(['Col1','Col2','Col3']).size 
    

    但只获取Count列。

  • 共有3个答案

    袁青青
    2023-03-14

    这应该能解决你的问题。

    df2 = df.groupby(['Col1','Col2','Col3'])['Col4'].agg('sum')
    
    董嘉祯
    2023-03-14

    您可以使用列名和聚合函数的判决。看https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.aggregate.html

    >>> df = pd.DataFrame([[1, 2, 3],
    ...                    [4, 5, 6],
    ...                    [7, 8, 9],
    ...                    [np.nan, np.nan, np.nan]],
    ...                   columns=['A', 'B', 'C'])
    >>> df.agg({'A' : ['sum', 'min'], 'B' : ['min', 'max']})
    #         A    B
    # max   NaN  8.0
    # min   1.0  2.0
    # sum  12.0  NaN
    
    吉栋
    2023-03-14

    使用带有元组的GroupBy.agg指定具有新列名的聚合函数:

    df = (df1.groupby(['Col1','Col2','Col3'])['Col4']
             .agg([('Count','size'), ('Col4_sum','sum')])
             .reset_index())
    print (df)
      Col1  Col2 Col3  Count  Col4_sum
    0    A     1   AA      2        15
    1    A     2   AB      1        30
    2    B     4   FF      1        10
    3    C     1   HH      1         4
    4    C     3   GG      2        13
    5    D     1   AA      1         4
    6    D     3   FF      1         6
    

    在熊猫0.25是可能使用命名聚合

    df = (df1.groupby(['Col1','Col2','Col3'])
             .agg(Count=('Col5', 'size'), Col4_sum=('Col4', 'sum'))
             .reset_index())
    print (df)
      Col1  Col2 Col3  Count  Col4_sum
    0    A     1   AA      2        15
    1    A     2   AB      1        30
    2    B     4   FF      1        10
    3    C     1   HH      1         4
    4    C     3   GG      2        13
    5    D     1   AA      1         4
    6    D     3   FF      1         6
    
     类似资料:
    • 我创建了一个名为的函数,该函数采用了如图所示的这3个参数,结果是新参数。我想将此函数应用于一个数据帧,其中函数参数是数据帧中的某些列,并希望将函数的输出参数添加为数据帧中的新参数,在数据帧中为每行计算函数。

    • 如何用于返回添加了多个新列的原始DataFrame的副本? 预期结果: 上面的示例导致: 。 背景: Pandas中的函数获取与新分配列关联的相关数据帧的副本,例如:。 此函数的0.19.2文档说明可以向数据帧添加多个列。 可以在同一分配中分配多个列,但不能引用在同一分配调用中创建的其他列。 此外: 参数: kwargs:关键字,值对 关键字是列名。 函数的源代码声明它接受字典:

    • 我正在与以下df合作: 我想强制所有年份的数字: 有没有一个简单的方法来做这件事,还是我必须把它们全部打印出来?

    • 问题内容: 我必须合并两个数据框: df1 df2 我必须将两个数据框统一为一个数据框。我需要像这样的输出: 问题答案: 用途: 样品:

    • 问题内容: 我将数据存储在pandas数据框中,如下所示: 所以,我的数据看起来像这样 我想将其转换为另一个数据框。预期的输出可以在以下python脚本中显示: 因此,我的预期输出如下所示 实际上,我可以使用以下命令来找到所有组合并对其进行计数: 但是,事实证明,此类组合在单个列中。我想将组合中的每个值分隔到不同的列中,并且还要为计数结果增加一列。有可能这样做吗?请问您有什么建议吗?先感谢您。 问

    • 问题内容: 我有一个OHLC价格数据集,该数据集已从CSV解析为Pandas数据框,并重新采样为15分钟的柱形: 我想添加各种计算的列,从简单的列开始,例如期间范围(HL),然后是布尔值以指示我将定义的价格模式的出现-例如锤形蜡烛模式,为其定义示例: 基本问题:如何将函数映射到列,特别是在我想引用多个其他列或整行或其他内容的地方? 这篇文章处理从单个源列添加两个计算列,这是很接近的,但还不完全是。