我得到了這個資料框:
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 |
如果 netx 行是 nan,則想要創建一個回圈,給定列“Levels”的最大值(在本例中為 1),然后傳遞該列的最大值加 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 |
我試影像這樣使用 iterrows
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 |
我知道這是一項簡單的任務,但它真的讓我很苦惱
非常感謝您的幫助
uj5u.com熱心網友回復:
您是在TIPOIDPRESTADORcolumn 而不是 on 上執行操作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
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/530823.html
標籤:Python熊猫循环
上一篇:如何忽略用戶輸入錯誤的迭代?
