Python 用条件替换数据帧值
我试图完成的是一个条件检查,它查看amount列中的值。 如果df['amount']中的值小于200k,则不执行任何操作。 如果df['amount']中的值大于或等于200k,则根据较大者,用月份或36.00中的值替换相应值Python 用条件替换数据帧值,python,python-3.x,pandas,Python,Python 3.x,Pandas,我试图完成的是一个条件检查,它查看amount列中的值。 如果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['mo
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
允许您在cond
参数中传递的True
值的位置屏蔽序列值。您还可以传递一个other
参数以提供值来替换被屏蔽的值。我使用np.max
来生成其他值
df.assign(months=df.months.mask(df.amount.ge(2E5), np.maximum(df.months, 36)))
amount months checks
0 332374.00 36.0 1.0
1 22250.75 17.0 0.0
2 45282.10 16.0 0.0
3 339720.00 46.0 1.0
4 1100.00 14.0 0.0
5 40000.00 13.0 0.0
6 15000.00 13.0 0.0
7 207820.00 36.0 1.0
8 497432.00 36.0 1.0
另请参阅,因为我们本可以使用以下工具执行相同的任务:
df.assign(months=df.months.where(df.amount.lt(2E5), np.maximum(df.months, 36)))
amount months checks
0 332374.00 36.0 1.0
1 22250.75 17.0 0.0
2 45282.10 16.0 0.0
3 339720.00 46.0 1.0
4 1100.00 14.0 0.0
5 40000.00 13.0 0.0
6 15000.00 13.0 0.0
7 207820.00 36.0 1.0
8 497432.00 36.0 1.0
我们也可以使用相同的逻辑执行此任务,但利用
a=df.amount.values
m=df.months.values
df.分配(月数=np.其中(a<2E5,m,np.最大值(m,36)))
每月支票金额
0 332374.00 36.0 1.0
1 22250.75 17.0 0.0
2 45282.10 16.0 0.0
3 339720.00 46.0 1.0
4 1100.00 14.0 0.0
5 40000.00 13.0 0.0
6 15000.00 13.0 0.0
7 207820.00 36.0 1.0
8 497432.00 36.0 1.0
允许您在True
参数中传递的cond
值的位置屏蔽序列的值。您还可以传递一个other
参数以提供值来替换被屏蔽的值。我使用np.max
来生成其他值
df.assign(months=df.months.mask(df.amount.ge(2E5), np.maximum(df.months, 36)))
amount months checks
0 332374.00 36.0 1.0
1 22250.75 17.0 0.0
2 45282.10 16.0 0.0
3 339720.00 46.0 1.0
4 1100.00 14.0 0.0
5 40000.00 13.0 0.0
6 15000.00 13.0 0.0
7 207820.00 36.0 1.0
8 497432.00 36.0 1.0
另请参阅,因为我们本可以使用以下工具执行相同的任务:
df.assign(months=df.months.where(df.amount.lt(2E5), np.maximum(df.months, 36)))
amount months checks
0 332374.00 36.0 1.0
1 22250.75 17.0 0.0
2 45282.10 16.0 0.0
3 339720.00 46.0 1.0
4 1100.00 14.0 0.0
5 40000.00 13.0 0.0
6 15000.00 13.0 0.0
7 207820.00 36.0 1.0
8 497432.00 36.0 1.0
我们也可以使用相同的逻辑执行此任务,但利用
a=df.amount.values
m=df.months.values
df.分配(月数=np.其中(a<2E5,m,np.最大值(m,36)))
每月支票金额
0 332374.00 36.0 1.0
1 22250.75 17.0 0.0
2 45282.10 16.0 0.0
3 339720.00 46.0 1.0
4 1100.00 14.0 0.0
5 40000.00 13.0 0.0
6 15000.00 13.0 0.0
7 207820.00 36.0 1.0
8 497432.00 36.0 1.0
您可以使用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
您可以使用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
,这样就不会覆盖数据帧。但这是您可能希望覆盖当前数据帧的一个重要原因。谢谢!这就是对我有效的解决方案。我只是想对你们两个说声谢谢,感谢你们的帮助。非常酷的实现。很好的解释!我经常使用assign
,这样就不会覆盖数据帧。但这是您可能希望覆盖当前数据帧的一个重要原因。谢谢!这就是对我有效的解决方案。我只是想对你们两个说声谢谢,感谢你们的帮助。非常酷的实现。非常感谢。虽然我选择了另一种解决方案,但我感谢您的时间和详细解释。我必须仔细阅读作业,再多加掩饰。没问题,我很高兴你找到了答案。非常感谢。虽然我选择了另一种解决方案,但我感谢您的时间和详细解释。我将不得不仔细阅读作业,并掩盖更多。一点问题也没有,我很高兴你找到了答案。