2015-11-03 212 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