2015-11-03 216 views
2

从简单的数据帧df像开始:大熊猫 - 加列基于条件

C,n 
AAA,1 
AAA,2 
BBB,1 
BBB,2 
CCC,1 
CCC,2 
DDD,1 
DDD,2 

我想在C栏上添加值基于一些条件的栏。我想补充的列是:

df['H'] = df['n']/10 

返回:

 C n H 
0 AAA 1 0.1 
1 AAA 2 0.2 
2 BBB 1 0.1 
3 BBB 2 0.2 
4 CCC 1 0.1 
5 CCC 2 0.2 
6 DDD 1 0.1 
7 DDD 2 0.2 

现在我想补充的同一列,但只有在C列值CCCDDD不同的归一化因子,因为,举例来说:

df['H'] = df['n']/100 

使:

 C n H 
0 AAA 1 0.1 
1 AAA 2 0.2 
2 BBB 1 0.1 
3 BBB 2 0.2 
4 CCC 1 0.01 
5 CCC 2 0.02 
6 DDD 1 0.01 
7 DDD 2 0.02 

到目前为止,我试图掩饰数据框为:

mask = df['C'] == 'CCC' 
df = df[mask] 
df['H'] = df['n']/100 

和制作的掩模样品。但因为我必须应用几个过滤器,保持原始的H列为非过滤值,我感到困惑。

回答

3
df.loc[df['C'] == 'CCC' , 'H'] = df['n']/100 
1

使用this answer的例子,你可以使用:

df['H'][mask] = df['H'][mask]/100 

你也可以计算分别基于H柱( 'CCC'/ 'DDD' 或不 'CCC'/ 'DDD'):

import numpy as np 
mask = np.logical_or(df['C'] == 'CCC', df['C']=='DDD') 
not_mask = np.logical_not(mask) 
df['H'][not_mask] = df['H'][not_mask]/10 
df['H'][mask] = df['H'][mask]/100 
2

能还可以使用ILOC

df.ix[df['C'].isin(['CCC','DDD']),['H']] = df['n']/100