Skip to main content
 首页 » 编程设计

python之用条件替换数据框值

2025年05月04日14傻小

我想要完成的是一个条件检查,它查看金额列中的值。 如果 df['amount'] 中的值小于 200k,则什么都不做。 如果 df['amount'] 中的值大于或等于 200k,则将相应的值替换为以月为单位的值或 36.00,具体取决于哪个较大。

import pandas as pd 
df['amount'] = [332374.00, 22250.75, 45282.10, 339720.00, 1100.00, 40000.00, 15000.00, 207820.00, 497432.00] 
df['months'] = [18.00, 17.00, 16.00, 46.00, 14.00, 13.00, 13.00, 13.00, 12.00] 
df['checks'] = [1.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 1.00] 

所需的输出是一个如下所示的数据集。

amount      months  checks 
332374.00   36.00   1.00 
22250.75    17.00   0.00 
45282.10    16.00   0.00 
339720.00   46.00   1.00 
1100.00     14.00   0.00 
40000.00    13.00   0.00 
15000.00    13.00   0.00 
207820.00   36.00   1.00 
497432.00   36.00   1.00 

请您参考如下方法:

您可以只使用 loc 来查找金额超过 200k 阈值且月份少于 36 的实例。然后只需将这些值设置为 36。

df.loc[(df['amount'] >= 200000) & (df['months'] < 36), 'months'] = 36 
>>> df 
      amount  months  checks 
0  332374.00      36       1 
1   22250.75      17       0 
2   45282.10      16       0 
3  339720.00      46       1 
4    1100.00      14       0 
5   40000.00      13       0 
6   15000.00      13       0 
7  207820.00      36       1 
8  497432.00      36       1 

时间

使用 assign 会比较慢,因为您必须复制整个数据框,然后分配新列。使用 loc 会更快。

下面是这个小数据集的时间:

%timeit df.assign(months=df.months.mask(df.amount.ge(2E5), np.maximum(df.months, 36))) 
# 1000 loops, best of 3: 1.01 ms per loop 
 
%timeit df.loc[(df['amount'] >= 200000) & (df['months'] < 36), 'months'] = 36 
# 1000 loops, best of 3: 838 µs per loop