Pandas中的Groupby列并执行计算(Python)

Pandas中的Groupby列并执行计算(Python),python,pandas,numpy,Python,Pandas,Numpy,我有一个数据集df,我想: 根据TotalB列的分组,取TotalB列的平均值 然后我想取这个新列,减去自由值,得到使用过的值 df1 期望的结果 date name rack TotalB freeB UsedB 11/20/2020 a yes 10.75 5 5.75 11/20/2020 b no 5.33 2 3.33 我在做什么: df.groupby('rack')

我有一个数据集df,我想:

  • 根据TotalB列的分组,取TotalB列的平均值
  • 然后我想取这个新列,减去自由值,得到使用过的值
  • df1

    期望的结果

    date        name    rack    TotalB  freeB   UsedB
    11/20/2020  a       yes     10.75       5    5.75
    11/20/2020  b       no      5.33        2    3.33
    
    我在做什么:

    df.groupby('rack')['TotalB'].mean()
    UsedB = df["TotalB"] - df["freeB"]
    
    我在保留数据集中的所有列时遇到问题。
    感谢您的任何建议。

    从问题来看,您似乎想做以下事情:

    df = df1.groupby(['date', 'name', 'rack'], as_index=False).agg({'TotalB': 'mean', 'freeB': 'mean})
    
    它将根据前3列进行分组,并找到最后2列的平均值,然后是

    df['UsedB'] = df.TotalB - df.freeB
    

    按相似列分组,计算平均值,然后分配UsedB

    df.groupby(['date'、'name'、'rack'、'freeB']).agg({'TotalB':'mean'}).reset_index().assign(UsedB=lambda x:x['TotalB']-x['freeB'])

    您还可以使用
    as_index=False
    选项:

    df.groupby(["date", "name", "rack"], as_index=False).mean().assign(
        UsedB=lambda x: x.TotalB - x.freeB
    )
    
             date name rack  freeB     TotalB     UsedB
    0  11/20/2020    a  yes      5  10.750000  5.750000
    1  11/20/2020    b   no      2   5.333333  3.333333
    
    df.groupby(["date", "name", "rack"], as_index=False).mean().assign(
        UsedB=lambda x: x.TotalB - x.freeB
    )