2015-10-13 74 views
6

假設我有一個這樣的數據幀:更改值值

Knownvalue A B C D E F G H 
    17.3413  0 0 0 0 0 0 0 0 
    33.4534  0 0 0 0 0 0 0 0 

我想做的事,就是當Knownvalue爲0-10之間,A從0變當Knownvalue在10-20之間時,B從0變爲1,等等。

它應該是這樣的改變之後:

Knownvalue  A B C D E F G H 
    17.3413  0 1 0 0 0 0 0 0 
    33.4534  0 0 0 1 0 0 0 0 

任何人都知道如何運用改變它的方法?

+0

(注意:文字比圖片更方便,因爲您可以複製和粘貼文本,因此我已經回覆到文本版本。) – DSM

回答

5

我首先將Knownvalue系列轉換爲等於其截斷值除以十的整數列表(例如27.87 // 10 = 2)。這些桶表示所需列位置的整數。由於Knownvalue位於第一列,因此我將這些值加1。

接下來,我列舉了這些bin值,它們有效地給出了行和列整數索引的元組對。我用iat到這些位置相等的值設置爲1

import pandas as pd 
import numpy as np 

# Create some sample data. 
df_vals = pd.DataFrame({'Knownvalue': np.random.random(5) * 50}) 
df = pd.concat([df_vals, pd.DataFrame(np.zeros((5, 5)), columns=list('ABCDE'))], axis=1) 

# Create desired column locations based on the `Knownvalue`. 
bins = (df.Knownvalue // 10).astype('int').tolist() 
>>> bins 
[4, 3, 0, 1, 0] 

# Set these locations equal to 1. 
for idx, col in enumerate(bins): 
    df.iat[idx, col + 1] = 1 # The first column is the `Knownvalue`, hence col + 1 

>>> df 
    Knownvalue A B C D E 
0 47.353937 0 0 0 0 1 
1 37.460338 0 0 0 1 0 
2 3.797964 1 0 0 0 0 
3 18.323131 0 1 0 0 0 
4 7.927030 1 0 0 0 0 
+0

忘記包括'numpy'導入,看起來不錯tho – Leb

+0

什麼適用(地板)在這裏做?我真的不知道...... –

+0

你能解釋一下:「對於n,c在枚舉(idx)中: df.iat [n,c + 1] = 1」? –

4

一種不同的方法將是使用get_dummies重建從Knownvalue列中的幀:

>>> import string 
>>> new_cols = pd.get_dummies(df["Knownvalue"]//10).loc[:,range(8)].fillna(0) 
>>> new_cols.columns = list(string.ascii_uppercase)[:len(new_cols.columns)] 
>>> pd.concat([df[["Knownvalue"]], new_cols], axis=1) 
    Knownvalue A B C D E F G H 
0  17.3413 0 1 0 0 0 0 0 0 
1  33.4534 0 0 0 1 0 0 0 0 

get_dummies的辛勤工作:

>>> (df.Knownvalue//10) 
0 1 
1 3 
Name: Knownvalue, dtype: float64 
>>> pd.get_dummies((df.Knownvalue//10)) 
    1 3 
0 1 0 
1 0 1