我正在寻找更好的方法来执行以下操作:
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)
答案 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