Dask 数据框获得第二高的值和列名

Dask dataframe get second highest value and column name

这段代码给出了最高值和列名。

import numpy as np
import pandas as pd
import dask.dataframe as dd

cols=[0,1,2,3,4]
df = pd.DataFrame(np.random.randn(1000, len(cols)), columns=cols)
ddf = dd.from_pandas(df, npartitions=4)
ddf['max_col'] = ddf[cols].idxmax(axis=1)
ddf['max_val'] = ddf[cols].max(axis=1)

我也想拿第二高。类似于:

ddf['max2_col'] = ddf[cols].idxmax2(axis=1)
ddf['max2_val'] = ddf[cols].max2(axis=1)

是否有idxmax2max2之类的功能?或者任何其他优化方法?

您通常应该首先尝试弄清楚如何用 pandas 做您想做的事。如果您不能,请改用 pandas 标签提出该问题,您会更快得到答案。

以下似乎适用于 pandas,尽管它可能不够优雅

import numpy as np
import pandas as pd
import dask.dataframe as dd

cols=[0,1,2,3,4]
df = pd.DataFrame(np.random.randn(1000, len(cols)), columns=cols)
def make_cols(df):
    df['max2_col'] = df[cols].values.argsort(axis=1)[:, -2]
    df2 = df[cols].values.copy()
    df2.sort(axis=1)
    df['max2_val'] = df2[:, -2]
    return df

所以要将它应用到 dask 变体,你可以这样做

ddf = dd.from_pandas(df, npartitions=4)
ddf.map_partitions(make_cols)
ddf.head()