Pandas中的Groupby,map和sum导致NaN

bab*_*abz 3 python numpy pandas pandas-groupby

数据每个ID多行

ID Value1 Value2
1    1     0
1    0     1
1    3     1
Run Code Online (Sandbox Code Playgroud)

期望的输出

对于每个ID,(SUM(Value1))*(Value2).

在这种情况下,对于ID1,它将是4*0 = 0.

我希望将结果放回原始表中,如下所示

ID Value1 Value2 Calculated_Value
1    1     0        0
1    0     1        4
1    3     1        4
Run Code Online (Sandbox Code Playgroud)

我试过这个..但是我在输出表中得到了NaN ..

df['Calculated_Value'] = df['ID'].map(df.groupby('ID')['Value1'].sum()*['Value2'])
Run Code Online (Sandbox Code Playgroud)

cma*_*her 5

你可以这样做.transform:

df['Calculated_Value'] = df.groupby('ID').Value2. \
                            transform(lambda x: x * df['Value1'].sum())

print df

#    ID  Value1  Value2  Calculated_Value
# 0   1       1       0                 0
# 1   1       0       1                 4
# 2   1       3       1                 4
Run Code Online (Sandbox Code Playgroud)