繁体   English   中英

Groupby Column in Pandas 并执行计算(Python)

[英]Groupby Column in Pandas and Perform calculation (Python)

我有一个数据集 df,我想在其中:

  1. 根据 TotalB column 的分组取 TotalB column 的平均值
  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"]

我在保留数据集中的所有列时遇到问题。 任何建议表示赞赏。

从这个问题来看,您似乎想要执行以下操作:

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

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

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

Groupby 相似列,计算平均值然后分配 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
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM