按ID对一列求和,但跳过第一个实例?

时间:2018-08-08 10:47:27

标签: python pandas dataframe pandas-groupby

我有一个类似以下的数据框。

A = [{'ID':1, 'Period':1, 'Variable':21}, {'ID':1,'Period':2, 'Variable':12}, 
      {'ID':2, 'Period':2, 'Variable':14}, {'ID':2, 'Period':3, 'Variable':18}]

df = pd.DataFrame(A)

从本质上讲,我想执行类似df.groupby('ID').sum()的操作来获取Variable列的总和,但是我需要跳过针对特定ID观察到的第一个期间。因此,对于ID = 1,我将在时段1删除观测值,但对于ID = 2,我将在时段2删除观测值。

我该怎么做?

3 个答案:

答案 0 :(得分:11)

您可以在每个组中进行切片以忽略第一行并调用sum

In[46]:
df.groupby('ID')['Variable'].apply(lambda x: x.iloc[1:].sum())

Out[46]: 
ID
1    12
2    18
Name: Variable, dtype: int64

如果要所有列:

In[47]:
df.groupby('ID').apply(lambda x: x.iloc[1:].sum())

Out[47]: 
    ID  Period  Variable
ID                      
1    1       2        12
2    2       3        18

答案 1 :(得分:2)

您可以使用pd.Series.duplicated忽略第一次出现的情况:

res = df[df['ID'].duplicated()].groupby('ID').sum()

print(res)

    Period  Variable
ID                  
1        2        12
2        3        18

答案 2 :(得分:1)

选择必要的观察值,然后应用汇总:

df[df.ID != df.Period].groupby('ID').sum()

输出

    Period  Variable
ID                  
1        2        12
2        3        18