Python 从最大和创建变量

Python 从最大和创建变量,python,pandas,dataframe,group-by,pandas-groupby,Python,Pandas,Dataframe,Group By,Pandas Groupby,我试图创建一个基于组和组最大和的变量 变量的函数如下所示: new_var = ((((.78 * group_sum) - ((sum of 2 largest values of SHOW column in group)+value of row))/(value of SHOW column in row))/3)+1 以下是我尝试过的示例df和代码: test_data = {'group': [1,1,1,1,1,2,2,2,2,2], 'SHOW':[100,100,300,40

我试图创建一个基于组和组最大和的变量

变量的函数如下所示:

new_var = ((((.78 * group_sum) - ((sum of 2 largest values of SHOW column in group)+value of row))/(value of SHOW column in row))/3)+1
以下是我尝试过的示例df和代码:

test_data = {'group': [1,1,1,1,1,2,2,2,2,2], 'SHOW':[100,100,300,400,100,100,100,400,500,200]}
df = pd.DataFrame(data = test_data)

df['new_var'] = ((((.78 * df.groupby('group')['SHOW'].transform(sum)) - (df.groupby('group')['SHOW'].apply(lambda grp: grp.nlargest(2).sum())+df['SHOW']))/df['SHOW'])/3)+1

df['new_var'] = ((((.78 * df.groupby('group')['SHOW'].transform(sum)) - (df.groupby('group')['SHOW'].nlargest(2).sum(axis = 0)+df['SHOW']))/df['SHOW'])/3)+1

我尝试的第一个代码返回了新变量的所有NaN,第二个代码返回了不正确的值。

您能将预期的正确值添加到您的问题中吗?尝试:

grp = df.groupby('group')['SHOW']

df['new_var'] = ((((.78 * grp.transform('sum')) - ((grp.transform(lambda x: x.iloc[:2].sum()))+df['SHOW']))/(df['SHOW']))/3)+1
输出:

   group  SHOW   new_var
0      1   100  2.600000
1      1   100  2.600000
2      1   300  1.311111
3      1   400  1.150000
4      1   100  2.600000
5      2   100  3.380000
6      2   100  3.380000
7      2   400  1.345000
8      2   500  1.209333
9      2   200  2.023333

正确的值是什么?因此,我们可以验证代码。