在 Pandas 中按列分组并执行计算(Python)。

4

我有一个数据集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"]

我在保留数据集中的所有列方面遇到了问题。 欢迎任何建议。

2个回答

4

从问题描述来看,似乎您希望实现以下操作:

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

这将按照前3列进行分组,并找到最后2列的平均值,然后

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

1

按相似的列进行分组,计算平均值然后赋值给UsedB

df.groupby(['日期', '名称', '架子', '可用空间']).agg({'总空间': '平均值'}).reset_index().assign(已用空间=lambda x: x['总空间'] - x['可用空间'])

         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
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接