在熊猫的Groupby不工作

时间:2018-03-28 16:54:27

标签: python pandas

数据 每个ID多行

ID Value1 Value2
1    1     0
1    0     1
1    3     1

期望的输出

对于每个ID,SUM(Value1)-SUM(Value2)。

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

groupby操作的结果以及groupby操作之间的差异为pd.Series,其中索引由石斑鱼列定义,在本例中为ID

因此,使用pd.Series.mapID来提取分组结果。

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

答案 1 :(得分:1)

你需要在两个帧之间有类似的索引,当你在第二个组中分组时,你创建索引为ID

# Set the index first
df.set_index('ID', inplace=True)

# Now when we calculate, we can 'left join' onto the correct index values
df['Calculated_Value'] = df.groupby(['ID'])['Value1'].sum()-df.groupby(['ID'])['Value2'].sum()