2
我需要按範圍對數值進行編碼:低:0,中等:1,高:2,非常高:3.我正在做四分位數。我有以下代碼:如何有效地獲得很多四分位數?
import pandas as pd
import numpy as np
def fun(df):
table = df.copy() # pandas dataframe
N = int(table.shape[0])
for header in list(table.columns):
q1 = np.percentile(table[header], 25)
q2 = np.percentile(table[header], 50)
q3 = np.percentile(table[header], 75)
for k in range(0, N):
if(table[header][k] < q1):
table[header][k] = int(0)
elif((table[header][k] >= q1) & (table[header][k] < q2)):
table[header][k] = int(1)
elif((table[header][k] >= q2) & (table[header][k] < q3)):
table[header][k] = int(2)
else:
table[header][k] = int(3)
pass
table = table.astype(int)
return table
證明
df = pd.DataFrame({
'A': [30, 28, 32, 25, 25, 25, 22, 24, 35, 40],
'B': [25, 30, 27, 40, 42, 40, 50, 45, 30, 25],
'C': [25.5, 30.1, 27.3, 40.77, 25.1, 25.34, 22.11, 23.81, 33.66, 38.56],
}, columns = [ 'A', 'B', 'C' ])
結果:
A B C
2 0 1
2 1 2
3 0 2
1 2 3
1 3 0
1 2 1
0 3 0
0 3 0
3 1 3
3 0 3
任何方式做同樣的,有效的?
結果是我的一樣。問題是:答案是否正確? (懷疑是@Nickil Maveli的結果) – JonAnthrax