使用 Pandas 替换多列中的值的优雅而有效的方法

SSM*_*SMK 4 python numpy series dataframe pandas

我有一个如下所示的数据框

f = pd.DataFrame({'person_id': [101,101,101,201,201,201,203],
                  'test_id':[123,123,124,321,321,321,456],
                 'los_24':[0.3,0.7,0.6,1.01,2,1,2],
                 'los_48':[1,0.2,0.4,0.7,11,2,3],
                 'in_24':[21,24,0.3,2.3,0.8,23,1.001],
                 'in_48':[11.3,202.0,0.2,0.3,41.0,47,2],
                 'test':['A','B','C','D','E','F','G']})
Run Code Online (Sandbox Code Playgroud)

我想更换 all values less than 1 with value 1 under columns like los_24,los_48,in_24,in_48

我尝试了以下

f['los_24'] = np.where((f.los_24 < 1.0),1,f.los_24)
f['los_48'] = np.where((f.los_48 < 1.0),1,f.los_48)
f['in_24'] = np.where((f.in_24 < 1.0),1,f.in_24)
f['in_48'] = np.where((f.in_48 < 1.0),1,f.in_48)
Run Code Online (Sandbox Code Playgroud)

但是您可以看到我使用不同的列名多次编写同一行代码。

在实际数据中,我有 10 多列来替换值。那么,还有其他有效而优雅的方式来写这个吗?

我希望我的输出如下所示

在此处输入图片说明

Mus*_*dın 8

你可以clip

cols = ["los_24", "los_48", "in_24", "in_48"]

f[cols] = f[cols].clip(lower=1)
Run Code Online (Sandbox Code Playgroud)

要得到

   person_id  test_id  los_24  los_48   in_24  in_48 test
0        101      123    1.00     1.0  21.000   11.3    A
1        101      123    1.00     1.0  24.000  202.0    B
2        101      124    1.00     1.0   1.000    1.0    C
3        201      321    1.01     1.0   2.300    1.0    D
4        201      321    2.00    11.0   1.000   41.0    E
5        201      321    1.00     2.0  23.000   47.0    F
6        203      456    2.00     3.0   1.001    2.0    G
Run Code Online (Sandbox Code Playgroud)