2014-12-01 76 views
1

我正在寻找一种更好的方式来做到以下几点:没有面具大熊猫创建条件语句新列

    A  
TRDNumber  
ALB2008081610 430  
ALB200808167 0  
ALB200808168 190  

使用条件语句

    A  B 
TRDNumber  
ALB2008081610 430  z 
ALB200808167 0  x 
ALB200808168 190  y 
创建基于在另一列中的值的新列

下面的代码有效,但我知道必须有更好的方法来做到这一点。

mask = df['A'] == 0 
df20 = df[mask] 
df20['B'] = 'x' 
df20 

mask2 = ((df.A != 0) & (df.B <= 200)) 
df21 = df[mask2] 
df21['B'] = 'y' 
df21 

pieces = [df20,df21] 
pd.concat(pieces) 

回答

1

我认为你要做到以下几点:

#%% 
df = pd.DataFrame() 
df['A'] = pd.Series([430,0,190], index=['ALB2008081610', 'ALB200808167', 'ALB200808168']) 
print(df) 
#%% 
df['B'] = None 
print(df) 

#%% 
df.loc[(df.A==0), 'B'] = 'x' 
print(df) 

#%% 
df.loc[(df.A!=0) & (df.A<=200), 'B'] = 'y' 
print(df) 

关于索引的说明可以在这里找到: http://pandas.pydata.org/pandas-docs/stable/indexing.html

下次提示:提供创建数据帧的代码。然后,我们可以直接使用您正在使用的相同数据框。

1

您可以创建功能和apply到您的数据集:

>>> def foo(x): 
...  if x['A'] == 0: 
...   return 'x' 
...  elif x['A'] < 200: 
...   return 'y' 
...  else: 
...   return 'z' 
... 
>>> df['B'] = df.apply(foo, axis=1) 
>>> df 
       A B 
TRDNumber    
ALB2008081610 430 z 
ALB200808167  0 x 
ALB200808168 190 y