2015-09-08 84 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

相关问题