Pandas 在变换lambda函数中,如果最大值为无穷大,则使用if-else获得第二大值

Pandas 在变换lambda函数中,如果最大值为无穷大,则使用if-else获得第二大值,pandas,Pandas,我有一个数据帧,如下所示: country_code count_date confirmed_cases growth_rate 0 AFG 2020-09-18 38872.0 94.019934 1 AFG 2020-09-17 38855.0 83.641975 2 AFG 2020-09-16 38815.0 108

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

      country_code  count_date  confirmed_cases  growth_rate
0              AFG  2020-09-18          38872.0    94.019934
1              AFG  2020-09-17          38855.0    83.641975
2              AFG  2020-09-16          38815.0   108.154506
3              AFG  2020-09-15          38772.0   196.296296
4              AFG  2020-09-14          38716.0   196.894410
...            ...         ...              ...          ...
20451          ZWE  2020-06-03            206.0          NaN
20452          ZWE  2020-06-02            203.0          NaN
20453          ZWE  2020-06-01            178.0          NaN
20454          ZWE  2020-05-31            174.0          NaN
20455          ZWE  2020-05-30            149.0          NaN
我正在尝试这样做: df.groupby'count\u date'。增长率.x:x/x.max

但是一些x.max值是无穷大的,在这种情况下,我想使用第二大值。如何将以下伪代码转换为实际代码:


df.groupby'count_date'。growth_rate.transformlambda x:x/x.max如果x.max!=inf else x/

您可以使用掩码从x删除inf值:

df.groupby'count\u date'。growth\u rate.transformlambda x:x/x[~np.isinfx].max 以下是一个例子:

示例数据帧 df=pd.DataFrame{ “盘点日期”:[“2020-09-17”、“2020-09-17”、“2020-09-17”、“2020-09-17”、“2020-09-17”], “增长率”:[1,3,2,np.inf] } df.groupby'count\u date'。growth\u rate.transformlambda x:x/x[~np.isinfx].max 0 0.333333 1 1.000000 2 0.666667 3 inf
如您所见,缩放是使用x中的最大非无穷大值执行的。

仅出于教育目的,我还想看看我们如何使用if/else执行此操作。也许不是你,但希望有人能想到。当然!如果lenx[np.isinfx]==0,则结构为:df.groupby'count\u date'。growth\u rate.transformlambda x:x/x.max,否则x/x[~np.isinfx]。max是否有办法访问第二大值来代替x.max。我尝试了x.nlargest2[1],但它不起作用。您可以使用x.nlargest2.iloc[1]。代码使用索引,但必须使用.iloc来获取位置