簡體   English   中英

根據條件替換Pandas Dataframe中的值

[英]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為1False0

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM