Pandas中的Groupby列并执行计算(Python)
我有一个数据集df,我想: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')
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
)