clean_data = pd.DataFrame([[1,2,3], [3, 11, 3], [7,8,12]])
我有这个df,我想遍历每一行并找到大于10的元素,然后用该行的平均值替换它。我可以用难看的代码来做到这一点,但我相信有几行代码可以做到这一点。有什么想法吗?
答案 0 :(得分:3)
将DataFrame.mask
与mean
一起使用:
df = clean_data.mask(clean_data > 10, clean_data.mean(axis=1), axis=0)
print (df)
0 1 2
0 1 2.000000 3
1 3 5.666667 3
2 7 8.000000 9
或将numpy.where
与DataFrame
构造函数配合使用:
df = pd.DataFrame(np.where(clean_data > 10, clean_data.mean(axis=1), clean_data),
columns=clean_data.columns,
index=clean_data.index)
print (df)
0 1 2
0 1.0 2.000000 3.0
1 3.0 5.666667 3.0
2 7.0 8.000000 9.0