我有以下数据框:
df = pd.DataFrame({'id': [1,1,1,2,3,2], 'year': ['2020', '2014', '2002', '2020', '2016', '2014'], 'e': [True, False, True, True, False, True], 'val': [100,200,300, 200, 300, 200]})
id year e val
0 1 2020 True 100
1 1 2014 False 200
2 1 2002 True 300
3 2 2020 True 200
4 3 2016 False 300
5 2 2014 True 200
我想要以下信息:
df.groupby('id').apply(lambda x: x[x['e']]['year'].min())
id
1 2002
2 2014
3 NaN
和
df.groupby('id').val.sum()
id
1 600
2 400
3 300
我的问题是,是否可以将这两个人归为同一组?还是我必须分开做然后合并?
答案 0 :(得分:4)
我们可以使用apply
s = df.groupby('id').apply(lambda x: pd.Series([x.loc[x['e'], 'year'].min(),x['val'].sum()],index=['myear','sumy']))
Out[321]:
myear sumy
id
1 2002 600.0
2 2014 400.0
3 NaN 300.0
答案 1 :(得分:2)
我认为在直接列agg
和year
上使用val
优于使用apply
的{{1}}
pd.Series