创建逐行条件列



我得到了这个数据框:

Df = pd.DataFrame({'TIPOIDPRESTADOR': ['CC', 'NI', 'CE', 'RS'],
'Levels': [0, 1, np.nan, np.nan]
})

| TIPOIDPRESTADOR | Levels   |
| --------        | -------- |
| CC              | 0        |
| NI              | 1        |
| CE              | NaN      |
| RS              | NaN      |

和a想要创建一个循环,给定列'Levels'的最大值(在本例中为1),如果netx行为nan,则传递该列的最大值加上1,依此类推

期望的输出应该像这样:

Desired_Output = pd.DataFrame({'TIPOIDPRESTADOR': ['CC', 'NI', 'CE', 'RS'],
'Levels': [0, 1, 2, 3]
})
| TIPOIDPRESTADOR | Levels   |
| --------        | -------- |
| CC              | 0        |
| NI              | 1        |
| CE              | 2        |
| RS              | 3        |

我试图使用像这样的迭代


for row in Df.iterrows():
Max_value = float(max(Df[["TIPOIDPRESTADOR"]))
Df['TIPOIDPRESTADOR'] = np.where(Df["TIPOIDPRESTADOR"].isna()==True, Max_value+1,  Df["TIPOIDPRESTADOR"])
Max_value = Max_value+1

但是我得到了这样的东西:

| TIPOIDPRESTADOR | Levels   |
| --------        | -------- |
| CC              | 0        |
| NI              | 1        |
| CE              | 2        |
| RS              | 2        |

我知道这是一个简单的任务,但它真的让我挣扎

我非常感谢你的帮助

您正在对TIPOIDPRESTADOR列执行操作,而不是对Levels(假设这些是打字错误,否则您不会得到您的结果),并且当在循环中使用np.where()时,您可能已经在第一次迭代中填充了所有NaN值,并且之后没有任何更新。

试试这个:

for i, row in Df.iterrows():
if pd.isna(row['Levels']) == True:
Df.loc[i, 'Levels'] = Df['Levels'].max() + 1 
else:
pass
Df
输出:

TIPOIDPRESTADOR Levels
0   CC              0.0
1   NI              1.0
2   CE              2.0
3   RS              3.0

最新更新