基于熊猫中每列条件的按列值替换

时间:2020-02-10 19:36:34

标签: python pandas

我正在尝试替换所有低于该列平均值的列中的所有值。现在,我正在通过以下方式进行操作:

  mean = data2.mean()

  for i, column in enumerate(data2.columns):
    mask = data2.iloc[:,i] < mean[i]
    data2.loc[mask, column] = mean[i]

有没有不用for循环的更好方法?

2 个答案:

答案 0 :(得分:3)

您可以clip的值,将较低的值指定为列的平均值。

#Sample data.
np.random.seed(0)
df = pd.DataFrame(np.random.randint(1, 10, (5, 3)), columns=list('abc'))
>>> df
   a  b  c
0  6  1  4
1  4  8  4
2  6  3  5
3  8  7  9
4  9  2  7

>>> df.mean()
a    6.6
b    4.2
c    5.8
dtype: float64

>>> df.clip(lower=df.mean(), axis=1)
     a    b    c
0  6.6  4.2  5.8
1  6.6  8.0  5.8
2  6.6  4.2  5.8
3  8.0  7.0  9.0
4  9.0  4.2  7.0

答案 1 :(得分:0)

这似乎可行:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(0,10,(5,8)))
print(df)

new_df = df[df > df.mean()].fillna(df.mean())
print(new_df)