我正在尝试替换所有低于该列平均值的列中的所有值。现在,我正在通过以下方式进行操作:
mean = data2.mean()
for i, column in enumerate(data2.columns):
mask = data2.iloc[:,i] < mean[i]
data2.loc[mask, column] = mean[i]
有没有不用for
循环的更好方法?
答案 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)