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来获取位置