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

时间:2018-06-01 06:53:05

标签: dask

此代码为我提供了最高值和列名。

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等功能?或者其他任何优化方式?

1 个答案:

答案 0 :(得分:0)

您通常应该首先尝试弄清楚如何使用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()