pandas:根据数量替换行中的值

pandas: replace values in rows according to their amount

我有一个数据框如下,

import pandas as pd

d ={'col1': [1, 2, 5], 'col2': [3, 4, 2], 'col3': [5, 1, 3]}
data = pd.DataFrame(d)

我想以行方式用 'max' 替换最大值,用 'min' 替换最小值,用 'mid' 替换中间值(剩余值)。 我做了以下事情:

data.apply(lambda row: row.replace(min(row),'min').replace(max(row), 'max').replace(r'\d+', 'mid', regex=True).astype('str'), axis=1)

虽然它适用于最小值和最大值,但它不适用于中间值,但我不确定我做错了什么。

每列使用 numpy.select comapre maxmin,如果没有分配匹配值 mid text:

arr = np.select([data.eq(data.max(axis=1), axis=0),
                 data.eq(data.min(axis=1), axis=0)], ['max', 'min'], 'mid')

df1 = pd.DataFrame(arr, index=data.index, columns=data.columns)
print (df1)
  col1 col2 col3
0  min  mid  max
1  mid  max  min
2  max  min  mid

如果先转换为字符串,您的代码就可以工作:

df1 = data.apply(lambda row: row.replace(min(row),'min').replace(max(row), 'max').astype('str').replace(r'\d+', 'mid', regex=True), axis=1)