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)
是否有idxmax2
或max2
之类的功能?或者任何其他优化方法?
您通常应该首先尝试弄清楚如何用 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()
这段代码给出了最高值和列名。
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)
是否有idxmax2
或max2
之类的功能?或者任何其他优化方法?
您通常应该首先尝试弄清楚如何用 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()