猿问

替换行中高于列值的值

这似乎很简单,但我无法弄清楚。因此,给定以下数据集:


df = pd.DataFrame(np.random.randint(0,100,size=(50, 3)), columns=list('ABC'))

df['Mean'] = df.mean(axis=1)


    A   B   C   Mean

0   26  6   73  35.000000

1   89  55  29  57.666667

2   8   89  87  61.333333

3   83  25  64  57.333333

4   35  89  97  73.666667

如何替换单行中高于该行的平均列的所有值?


所需的输出:


    A   B   C   Mean

0   26  6   0   35.000000

1   0   55  29  57.666667

2   8   0   0   61.333333

3   0   25  0   57.333333

4   35  0   0   73.666667

我已经试过了:


df.apply(lambda x: 0 if x > df['Mean'] else x)

这导致ValueError:


ValueError:('系列的真值不明确。请使用a.empty,a.bool(),a.item(),a.any()或a.all()。','发生在索引A' )


郎朗坤
浏览 117回答 2
2回答

MMMHUHU

这应该工作df[df>df.mean(axis=1).tolist()] = 0或者,如果您想使用均值列df[df>df['Mean'].tolist()] = 0

狐的传说

我认为那可以工作for i in range(df.shape[1]):    mask = df.iloc[:,i] > df.Mean    column_name = df.columns[i]    df.loc[mask, column_name] = 0
随时随地看视频慕课网APP

相关分类

Python
我要回答