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 max
和 min
,如果没有分配匹配值 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)
我有一个数据框如下,
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 max
和 min
,如果没有分配匹配值 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)