我想为分组对象的每一组计算一个值,但对组的每一行重复该值。 Pandas数据帧组中的计算 尽管标题似乎是我需要的,但这不起作用。 我看不出公式是否有问题。它应该是Excel词汇中的一种总和。
dat = pd.DataFrame({'Supplier': ['A', 'A', 'A', 'B','B'], 'Id': ['1','2','3','4','5'], 'a': [2,2,2,2,2], 'AVG' :[5,6,7,8,3], 'BP': [3,4,5,6,3], 'Hc': [0.15,0.15,0.15,0.15,0.15]})
dat = dat.groupby(['Supplier', 'Id'])['a','AVG', 'BP','Hc'].sum()
for supplier in dat.index[0]:
dat['s'] = np.sqrt((2 * (dat['a'])/ (
((dat['AVG'] * dat['BP'] * (dat['Hc']/4)).sum()))))
我得到的结果是这样的:
a AVG BP Hc s
Supplier Id
A 1 2 5 3 0.15 0.902358
2 2 6 4 0.15 0.902358
3 2 7 5 0.15 0.902358
B 4 2 8 6 0.15 0.902358
5 2 3 3 0.15 0.902358
但我想得到这样的东西:
a AVG BP Hc s
Supplier Id
A 1 2 5 3 0.15 x
2 2 6 4 0.15 x
3 2 7 5 0.15 x
B 4 2 8 6 0.15 y
5 2 3 3 0.15 y
这里的 x 和 y 只是为了表明每个"组"的数字应该不同
你可以试试这个:
groupby.apply
函数使您可以访问每个组(供应商(数据帧。
def cal_func(df):
df['s'] = np.sqrt((2 * (df['a'])/ (
((df['AVG'] * df['BP'] * (df['Hc']/4)).sum()))))
return df
dat_new = dat.groupby(['Supplier']).apply(cal_func)
dat_new
Supplier Id a AVG BP Hc s
0 A 1 2 5 3 0.15 1.200600
1 A 2 2 6 4 0.15 1.200600
2 A 3 2 7 5 0.15 1.200600
3 B 4 2 8 6 0.15 1.367971
4 B 5 2 3 3 0.15 1.367971
import pandas as pd
import numpy as np
dat = pd.DataFrame({'Supplier': ['A', 'A', 'A', 'B','B'], 'Id': ['1','2','3','4','5'], 'a': [2,2,2,2,2], 'AVG' :[5,6,7,8,3], 'BP': [3,4,5,6,3], 'Hc': [0.15,0.15,0.15,0.15,0.15]})
dat = dat.groupby(['Supplier', 'Id'])['a','AVG', 'BP','Hc'].sum()
dat['s'] = np.sqrt((2 * (dat['a']))/(dat['AVG']* dat['BP']* (dat['Hc']/4)).groupby(level=0).sum())
print(dat)
a AVG BP Hc s
Supplier Id
A 1 2 5 3 0.15 1.200600
2 2 6 4 0.15 1.200600
3 2 7 5 0.15 1.200600
B 4 2 8 6 0.15 1.367971
5 2 3 3 0.15 1.367971