簡體   English   中英

根據之前列中滿足的某些條件,在 dataframe 中創建新列

[英]Create new column in dataframe based on certain conditions met in previous columns

我想根據某個值是否接連出現在 dataframe 中創建一個新列。 示例我的 df 看起來像:
編輯:(值可以包含(A,N,E,V))

Name  Jan Feb Mar April

John   N   N   E    E

Alex   E   E   E    E

Alice  E   E   E    N

如果有人從前幾個月的“N”值更改為“E”,則我希望有一個新的“指定”列返回 1,如果有其他情況,則返回“0”。 本質上,這個 dataframe 來自每月更新的 excel 文件,因此最新月份將出現在最后一列中。

我有一個代碼

def func(u,x,y,z):
    if u =='N' and x== 'E':
        return 1
    elif x =='N' and y == 'E':
        return 1
     elif y =='N' and z == 'E':
        return 1
    else: 
        return 0

本質上,我想要一個不需要每個月都更新的代碼,並且可以只使用列索引來返回值。

與右移相同的 dataframe 進行比較。 由於 'N' > 'E',轉換為 int 將生成你想要的

>>> df = pd.DataFrame({'Jan': list('NEE'), 'Feb': list('NEE'), 'Mar': 'E', 'April': list('EEN')})
>>> df
  Jan Feb Mar April
0   N   N   E     E
1   E   E   E     E
2   E   E   E     N
>>> (df < df.shift(1, axis=1)).astype(int)                                                              
   Jan  Feb  Mar  April
0    0    0    1      0
1    0    0    0      0
2    0    0    0      0

如果您只想對最后一列執行相同操作,只需

(df.iloc[:, -1] < df.iloc[:, -2]).astype(int)

UPD:如果有其他字母,應該是:

(( df.shift(1, axis=1) == 'N') & (df == 'E')).astype(int)

或者,對於單個列:

((df.iloc[:, -2] == 'N') & (df.iloc[:, -1] == 'E')).astype(int)

暫無
暫無

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

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