Use mask
with numpy.random.rand
:
np.random.seed(123)
arr = np.random.rand(*df.shape)
print (arr)
[[0.69646919 0.28613933 0.22685145 0.55131477]
[0.71946897 0.42310646 0.9807642 0.68482974]
[0.4809319 0.39211752 0.34317802 0.72904971]
[0.43857224 0.0596779 0.39804426 0.73799541]
[0.18249173 0.17545176 0.53155137 0.53182759]]
m = (df > 2) & (df < 8)
#replace only values by mask
df1 = df.mask(m, arr)
print (df1)
2018-07-01 2018-07-02 2018-07-03 2018-07-04
1002_NUc_Marathalli_7 0.734000 0.550000 0.226851 0.481
1002_NUc_Marathalli_8 1.338000 1.220000 0.911000 0.601
1002_NUc_Marathalli_9 0.330000 1.180000 0.754000 0.631
1003_IU2_Munnekolalu_7 0.628000 0.479000 0.988000 0.694
1003_IU2_Munnekolalu_8 0.182492 0.175452 8.387000 9.428
#replace all rows if exist at least one value True in mask
df2 = df.mask(m.any(axis=1), arr, axis=0)
print (df2)
2018-07-01 2018-07-02 2018-07-03 2018-07-04
1002_NUc_Marathalli_7 0.696469 0.286139 0.226851 0.551315
1002_NUc_Marathalli_8 1.338000 1.220000 0.911000 0.601000
1002_NUc_Marathalli_9 0.330000 1.180000 0.754000 0.631000
1003_IU2_Munnekolalu_7 0.628000 0.479000 0.988000 0.694000
1003_IU2_Munnekolalu_8 0.182492 0.175452 0.531551 0.531828
Details:
print (m)
2018-07-01 2018-07-02 2018-07-03 2018-07-04
1002_NUc_Marathalli_7 False False True False
1002_NUc_Marathalli_8 False False False False
1002_NUc_Marathalli_9 False False False False
1003_IU2_Munnekolalu_7 False False False False
1003_IU2_Munnekolalu_8 True True False False
print (m.any(axis=1))
1002_NUc_Marathalli_7 True
1002_NUc_Marathalli_8 False
1002_NUc_Marathalli_9 False
1003_IU2_Munnekolalu_7 False
1003_IU2_Munnekolalu_8 True
dtype: bool