如何修改未满足情况的条件的dataframe行值我想修改列值在所有行中的2至8之间的位置
我尝试使用iterateTuple进行列的行和iTerateItems,并验证值和更新。它花了一些时间
是否有任何直接方法来更新每一行。
2018-07-01 2018-07-02 2018-07-03 2018-07-04
cell_name
1002_NUc_Marathalli_7 0.734 0.550 5.985 0.481
1002_NUc_Marathalli_8 1.338 1.220 0.911 0.601
1002_NUc_Marathalli_9 0.330 1.180 0.754 0.631
1003_IU2_Munnekolalu_7 0.628 0.479 0.988 0.694
1003_IU2_Munnekolalu_8 5.327 6.831 8.387 9.428
与numpy.random.rand
使用mask
:
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
详细信息:
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