Pandas groupby 使用 agg 并同时 apply

Bru*_*llo 2 python dataframe pandas

我有以下数据框:

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
Run Code Online (Sandbox Code Playgroud)

我想要以下信息:

df.groupby('id').apply(lambda x: x[x['e']]['year'].min())
id
1    2002
2    2014
3     NaN
Run Code Online (Sandbox Code Playgroud)

df.groupby('id').val.sum()
id
1    600
2    400
3    300
Run Code Online (Sandbox Code Playgroud)

我的问题是是否可以将这两个返回到同一组中?还是我必须分开做然后合并?

WeN*_*Ben 6

我们可以这样做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
Run Code Online (Sandbox Code Playgroud)