使用内联循环不更改else

2024-06-11 15:25:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个内联循环,可以找到<;数列中的3。我想改变一个不同的列时,这是真的,不做任何更改时,这是不正确的

我不知道要在else中加什么才能不改变df[“TOTAL”]

我将它与for循环绑定,但这不起作用,因为如果任何行小于3,它将更改所有行

df['TOTAL'] = [np.nan if x > 3 else ?? for x in df['COUNT_MONTHS']]   
for x in df['COUNT_MONTHS']:   
    if x < 3:   
       df['TOTAL'] = np.nan   

Tags: inltdfforifcountnpnan
3条回答

可以将apply函数与if-else条件一起使用

df['Total'] =  df['COUNT_MONTHS'].apply(lambda x : np.nan if x > 3 else ??)

使用df.loc

df.loc[df['COUNT_MONTHS'] > 3, 'TOTAL'] = np.nan

编辑:

我最初的想法是:

df['TOTAL'][df['COUNT_MONTHS'] > 3] = np.nan

这称为链式索引或链式分配。它在这里工作,但有三个原因避免它

  1. 它不是惯用的,因此对其他人可读性较差

  2. 效率较低

  3. 在更复杂的情况下,它实际上可能不会更新您的数据

for index, x in df['COUNT_MONTHS']:   
    if x < 3:   
       df.loc[index, 'TOTAL'] = np.nan  
    else:
       df.loc[index, 'TOTAL'] = 'MY_THING'

工作示例:

>>>import pandas as pd
>>>import numpy as np
>>>df = pd.DataFrame({'a':[1,2,3,4,5,6]})
>>>for index, x in df['a'].items():
    if x <3 :
        df.loc[index,'total'] = np.nan
    else:
        df.loc[index,'total'] = 10
>>>df

    a   total
0   1   NaN
1   2   NaN
2   3   100.0
3   4   100.0
4   5   100.0
5   6   100.0

相关问题 更多 >