开发过程中遇到这样一种场景,dataframe按一列groupby之后,要对多列进行不同的操作。
例如:
In[25]: df
Out[25]:
name price size
0 A 100 M
1 A 90 S
2 B 100 M
3 B 110 M
4 B 120 L
5 C 80 S
6 C 70 S
7 C 90 M
8 C 60 S
9 D 150 L
ABCD四个人,手下分别有2,3,4,1套房子,价格和大小也均有数据。
现在想分别找出每个人手上房子price最大的房子的size。
groupby+匿名函数可轻松搞定:
In[26]: df.groupby('name').apply(lambda sub:sub['size'][sub['price'].idxmax()])
Out[26]:
name
A M
B L
C M
D L
dtype: object
emmmmm... 如果我们想算每个人房子价格的总和除以房子数量的平方呢?(不要考虑是否有意义)
In[31]: df.groupby('name').apply(lambda sub:sub['price'].sum()/(sub['price'].count())**2)
Out[31]:
name
A 47
B 36
C 18
D 150
dtype: int64