2015-09-08 129 views
2

我有一個CSV文件,我試圖解決我在熊貓上的問題。我用純Python解決了這個問題,但我無法用熊貓來完成。根據Python中的規則創建一個數據框的新列Pandas

我的CSV文件有5列。我想通過使用其他人的數據創建一個新的。該列的內容是[0,1,2,3,4,5]。因此,基於價值,我要做到以下幾點:

if value == 0: 
    cost_new_column = 0 
elif value == 1: 
    cost_new_column = 1000 
elif value == 2: 
    cost_new_column = 2500 
... 

使用forif是簡單的做它在純Python。我如何在熊貓中做到這一點?

回答

3

我想制定你想如何map值的dict並呼籲列,例如map

In [95]: 
df = pd.DataFrame({'a':np.random.randint(0, 6, 20)}) 
df 

Out[95]: 
    a 
0 5 
1 3 
2 3 
3 5 
4 5 
5 4 
6 0 
7 5 
8 1 
9 0 
10 5 
11 2 
12 4 
13 5 
14 2 
15 5 
16 0 
17 5 
18 4 
19 4 

In [96]:  
d = dict(zip(range(6), [0,1000,2500,4000,5000,8000])) 
d 

Out[96]: 
{0: 0, 1: 1000, 2: 2500, 3: 4000, 4: 5000, 5: 8000} 

In [98]:  
df['new_col'] = df['a'].map(d) 
df 

Out[98]: 
    a new_col 
0 5  8000 
1 3  4000 
2 3  4000 
3 5  8000 
4 5  8000 
5 4  5000 
6 0  0 
7 5  8000 
8 1  1000 
9 0  0 
10 5  8000 
11 2  2500 
12 4  5000 
13 5  8000 
14 2  2500 
15 5  8000 
16 0  0 
17 5  8000 
18 4  5000 
19 4  5000 
+0

感謝。這樣可行。還在學習熊貓:)由於SE限制,我會在9分鐘內接受你的答案 – Tasos

+0

如果條件不準確,你會怎麼做,但是看起來像這樣:'if value <-10','if -10 <= value和值<10'和'如果10 <=值'? – Kartik

+0

因爲我會使用'pd.cut'或使用多個'loc'語句或'np.where'所以'np.where(值<-10,some_val,np.where((value> = 10)&值<10),other_val,third_val)',其中'value'是df中的某個列 – EdChum

相關問題