簡體   English   中英

從沒有掩碼pandas的條件語句創建新列

[英]create new column from conditional statement without mask 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)

我想你想做以下事情:

#%%
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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM