Python 大熊猫中的Groupby、map和sum导致NaN

Python 大熊猫中的Groupby、map和sum导致NaN,python,pandas,numpy,pandas-groupby,Python,Pandas,Numpy,Pandas Groupby,每个ID有多行数据 ID Value1 Value2 1 1 0 1 0 1 1 3 1 期望输出 对于每个ID,(总和(值1))*(值2) 在这种情况下,ID1的值为4*0=0 我想把结果放回原来的表格,如下所示 ID Value1 Value2 Calculated_Value 1 1 0 0 1 0 1 4 1 3 1 4 我已经试过了…它运行了,但是我在输出表

每个ID有多行数据

ID Value1 Value2
1    1     0
1    0     1
1    3     1
期望输出

对于每个ID,(总和(值1))*(值2)

在这种情况下,ID1的值为4*0=0

我想把结果放回原来的表格,如下所示

ID Value1 Value2 Calculated_Value
1    1     0        0
1    0     1        4
1    3     1        4
我已经试过了…它运行了,但是我在输出表中得到了NaN

df['Calculated_Value'] = df['ID'].map(df.groupby('ID')['Value1'].sum()*['Value2'])

您可以为此使用
groupby.transform

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

print(df)

   ID  Value1  Value2  Calculated_Value
0   1       1       0                 0
1   1       0       1                 4
2   1       3       1                 4

我们可以使用
groupby
mul

df['Yourvalue']=df.set_index('ID').Value2.mul(df.groupby('ID').Value1.sum(),level=0).values
df
Out[278]: 
   ID  Value1  Value2  Yourvalue
0   1       1       0          0
1   1       0       1          4
2   1       3       1          4

您可以使用
.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

使用
pd.factorize
np.bincount

f, u = pd.factorize(df.ID)
df.assign(YourValue=np.bincount(f, df.Value1)[f] * df.Value2)

   ID  Value1  Value2  YourValue
0   1       1       0        0.0
1   1       0       1        4.0
2   1       3       1        4.0

超级粗略地使用
fillna
自动告诉我是否应该向下转换到
int

f, u = pd.factorize(df.ID)
df.assign(YourValue=np.bincount(f, df.Value1)[f] * df.Value2).fillna(
    0, downcast='infer')

   ID  Value1  Value2  YourValue
0   1       1       0          0
1   1       0       1          4
2   1       3       1          4