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

2024-09-29 21:57:26 发布

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

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

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

df1

date        name    rack    TotalB  freeB   
11/20/2020  a       yes     11      5   
11/20/2020  a       yes     10      5   
11/20/2020  a       yes     12      5   
11/20/2020  a       yes     10      5   
11/20/2020  b       no      5       2   
11/20/2020  b       no      5       2   
11/20/2020  b       no      6       2   

期望的结果

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"]

我在保留数据集中的所有列时遇到问题。 如有任何建议,我们将不胜感激


Tags: 数据nonamedfdatemean建议yes
2条回答

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

df.groupby(['date', 'name', 'rack', 'freeB']).agg({'TotalB': 'mean'}).reset_index().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

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

df.groupby(["date", "name", "rack"], as_index=False).mean().assign(
    UsedB=lambda x: x.TotalB - x.freeB
)

从这个问题来看,你似乎想做如下事情:

df = df1.groupby(['date', 'name', 'rack'], as_index=False).agg({'TotalB': 'mean', 'freeB': 'mean})

它将根据前3列进行分组,并找到最后2列的平均值,然后是

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

相关问题 更多 >

    热门问题