我有一个类似以下的数据框。
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删除观测值。
我该怎么做?
答案 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