替换行中高于列值的值

时间:2018-08-03 12:19:20

标签: python pandas numpy

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

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')

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

这应该有效

df[df>df.mean(axis=1).tolist()] = 0

或者如果您想使用均值列

df[df>df['Mean'].tolist()] = 0