熊猫分组使用agg并同时申请

时间:2020-09-01 19:56:59

标签: python pandas dataframe

我有以下数据框:

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

我的问题是,是否可以将这两个人归为同一组?还是我必须分开做然后合并?

2 个答案:

答案 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)

我认为在直接列aggyear上使用val优于使用apply的{​​{1}}

pd.Series