[英]Replace value in Pandas Dataframe based on condition
我有一個帶有一些數值的數據幀列。 我希望根據給定條件將這些值替換為1和0。 條件是如果該值高於列的平均值,則將數值更改為1,否則將其設置為0。
這是我現在的代碼:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
dataset = pd.read_csv('data.csv')
dataset = dataset.dropna(axis=0, how='any')
X = dataset.drop(['myCol'], axis=1)
y = dataset.iloc[:, 4:5].values
mean_y = np.mean(dataset.myCol)
目標是數據幀y。 你是這樣的:
0
0 16
1 13
2 12.5
3 12
等等。 mean_y等於3.55。 因此,我需要將大於3.55的所有值變為1,其余為0。
我應用了這個循環,但沒有成功:
for i in dataset.myCol:
if dataset.myCol[i] > mean_y:
dataset.myCol[i] = 1
else:
dataset.myCol[i] = 0
輸出如下:
0
0 16
1 13
2 0
3 12
我究竟做錯了什么? 有人可以解釋我的錯誤嗎?
謝謝!
試試這種矢量化方法:
dataset.myCol = np.where(dataset.myCol > dataset.myCol.mean(), 1, 0)
將布爾掩碼轉換為整數 - True
s為1
, False
為0
:
print (dataset.myCol > mean_y)
0 True
1 False
2 False
3 False
Name: myCol, dtype: bool
dataset.myCol = (dataset.myCol > mean_y).astype(int)
print (dataset)
myCol
0 1
1 0
2 0
3 0
為了您的形式給出,不推薦,因為慢需要iterrows
由列和指標值的設定值:
for i, x in dataset.iterrows():
if dataset.loc[i, 'myCol'] > mean_y:
dataset.loc[i, 'myCol'] = 1
else:
dataset.loc[i, 'myCol'] = 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.