pandas在groupby中找到最大值并应用函数

时间:2015-06-14 20:27:23

标签: python pandas

我有一个数据帧df,如下所示:

H,Nu,City
1,15,Madrid
3,15,Madrid
3,1600,Madrid
5,17615,Madrid
2,55,Dublin
4,5706,Dublin
2,68,Dublin
1,68,Dublin

我想找到Nu列的最大值/城市。然后找到H的相应值并添加新列df['H2'] = df['H']/max(H/city)。到目前为止我试过了:

d = df.groupby('City').apply(lambda t: t[t.Nu==t.Nu.max()])

正确返回:

          H     Nu    City
City                             
Dublin 5  4   5706  Dublin
Madrid 3  5  17615  Madrid

如何将我的最大H值(都柏林为4,马德里为5)设置为常量/城市,以便在整个DataFrame中应用此功能?预期的df将显示为:

H,Nu,City,H2
1,15,Madrid,0.2
3,15,Madrid,0.6
3,1600,Madrid,0.6
5,17615,Madrid,1.0
2,55,Dublin,0.5
4,5706,Dublin,1.0
2,68,Dublin,0.5
1,68,Dublin,0.25

1 个答案:

答案 0 :(得分:4)

使用.idxmax,您可以获得每个Nu具有最高City值的行:

>>> i = df.groupby('City')['Nu'].transform('idxmax').values
>>> df['H2'] = df['H'] / df.loc[i, 'H'].values
>>> df
   H     Nu    City    H2
0  1     15  Madrid  0.20
1  3     15  Madrid  0.60
2  3   1600  Madrid  0.60
3  5  17615  Madrid  1.00
4  2     55  Dublin  0.50
5  4   5706  Dublin  1.00
6  2     68  Dublin  0.50
7  1     68  Dublin  0.25