从不带掩码pandas的条件语句创建新列

2024-10-04 01:37:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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

                 A      
 TRDNumber      
ALB2008081610   430     
ALB200808167    0       
ALB200808168    190     

使用条件语句基于另一列中的值创建新列

^{pr2}$

下面的代码可以工作,但我知道必须有更好的方法来实现这一点。在

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)

Tags: 方法代码dfmask语句条件piecespr2
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

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

您可以创建函数并将其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

相关问题 更多 >