Skip to main content
 首页 » 编程设计

python之在 DataFrame 列中设置最大值

2025年05月04日13del

我在 Pandas 数据框中有以下数据点:

DateTime                Data 
2017-11-21 18:54:31     1 
2017-11-22 02:26:48     2 
2017-11-22 10:19:44     3 
2017-11-22 15:11:28     6 
2017-11-22 23:21:58     7 
2017-11-28 14:28:28    28 
2017-11-28 14:36:40     0 
2017-11-28 14:59:48     1 

我想应用一个函数将所有大于 1 的数据值转换为 1: 有没有办法将以下两个 lambda 函数合并为一个(如 else 语句)?

[(lambda x: x/x)(x) for x in df['Data'] if x > 0] 
[(lambda x: x)(x) for x in df['Data'] if x <1 ] 

期望的最终结果:

DateTime                Data 
2017-11-21 18:54:31     1 
2017-11-22 02:26:48     1 
2017-11-22 10:19:44     1 
2017-11-22 15:11:28     1 
2017-11-22 23:21:58     1 
2017-11-28 14:28:28     1 
2017-11-28 14:36:40     0 
2017-11-28 14:59:48     1 

请您参考如下方法:

使用 np.clip 的 Numpy 解决方案 -

df['Data'] = np.clip(df.Data.values, a_min=None, a_max=1) 
df 
 
              DateTime  Data 
0  2017-11-21 18:54:31     1 
1  2017-11-22 02:26:48     1 
2  2017-11-22 10:19:44     1 
3  2017-11-22 15:11:28     1 
4  2017-11-22 23:21:58     1 
5  2017-11-28 14:28:28     1 
6  2017-11-28 14:36:40     0 
7  2017-11-28 14:59:48     1 

传递 a_min=None 以指定无下限。