为熊猫数据框中的所有值添加地板和天花板

dgo*_*mzi 2 python dataframe pandas

我想为数据框中的每个元素添加 -3 和 3 的地板和天花板

df=pd.DataFrame({'a':[4,-3,6,2],'b':[1,2,3,4],'c':[11,-4.5,2,6]})
Run Code Online (Sandbox Code Playgroud)

最终结果应该显示

   a  b  c
0  3  1  3
1 -3  2 -3
2  3  3  2
3  2  3  3
Run Code Online (Sandbox Code Playgroud)

我通过运行每列然后使用

df['a'].apply(lambda x: -3 if x<-3 else (3 if x>3 else x))
Run Code Online (Sandbox Code Playgroud)

有没有更优雅的(python)方法来做到这一点

jpp*_*jpp 5

使用pd.DataFrame.clip

df = df.clip(-3, 3).astype(int)

   a  b  c
0  3  1  3
1 -3  2 -3
2  3  3  2
3  2  3  3
Run Code Online (Sandbox Code Playgroud)

整数转换是必要的,因为系列c最初是 a float。它似乎pd.DataFrame.clip不会触发dtypes.