Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用条件替换数据帧值_Python_Python 3.x_Pandas - Fatal编程技术网

Python 用条件替换数据帧值

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

我试图完成的是一个条件检查,它查看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['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
,这样就不会覆盖数据帧。但这是您可能希望覆盖当前数据帧的一个重要原因。谢谢!这就是对我有效的解决方案。我只是想对你们两个说声谢谢,感谢你们的帮助。非常酷的实现。非常感谢。虽然我选择了另一种解决方案,但我感谢您的时间和详细解释。我必须仔细阅读作业,再多加掩饰。没问题,我很高兴你找到了答案。非常感谢。虽然我选择了另一种解决方案,但我感谢您的时间和详细解释。我将不得不仔细阅读作业,并掩盖更多。一点问题也没有,我很高兴你找到了答案。