这似乎很简单,但我无法弄清楚。 因此,给定以下数据集:
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')
答案 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