从没有掩码pandas的条件语句创建新列

时间:2014-12-01 15:47:19

标签: python pandas

我正在寻找更好的方法来执行以下操作:

                 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)

2 个答案:

答案 0 :(得分:2)

我想你想要做以下事情:

#%%
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 :(得分: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