这是实现以下目标的最快方法:
我正在使用Pandas Dataframe(NxN),我想迭代每一行和每个元素以检查元素是否大于行的意思。如果它更大,我想将元素值更改为1。
我使用以下方法计算平均值:
mean_value = df.ix[elementid].mean(axis=0)
但迭代每个元素并使用嵌套循环检查它是否为> = mean_value非常慢。
答案 0 :(得分:6)
您可以先按行计算mean
,然后与ge
进行比较,mask
添加1
:
print df
a b c
0 0 1 2
1 0 1 2
2 1 1 2
3 1 0 1
4 1 1 2
5 0 0 1
mean_value = df.mean(axis=1)
print mean_value
0 1.000000
1 1.000000
2 1.333333
3 0.666667
4 1.333333
5 0.333333
mask = df.ge(mean_value, axis=0)
print mask
a b c
0 False True True
1 False True True
2 False False True
3 True False True
4 False False True
5 False False True
print df.mask(mask, 1)
a b c
0 0 1 1
1 0 1 1
2 1 1 1
3 1 0 1
4 1 1 1
5 0 0 1