亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果 df 中的列的值是同一數據幀中另一列的值之一,則匹配

如果 df 中的列的值是同一數據幀中另一列的值之一,則匹配

慕無忌1623718 2021-09-02 14:43:47
dfcol1  col2A      a|x|yB      a|x|yC      c|x|zD      e|j|y我的目標是創建一個名為“status”的新列,以查看 col1 中的條目是否是 col2 中的條目之一(由管道分隔)。輸出應該是這樣的col1  col2     statusA      a|x|y   TrueB      a|x|y   FalseC      c|x|z   TrueD      e|j|y   False我的代碼:df["col1"]= df["col1"].str.lower()df['status']=df['col1'].isin(df['col2']) 但這將“狀態”列中的所有條目都設為 False請幫我解決這個問題,拜托?。?!
查看完整描述

3 回答

?
慕斯王

TA貢獻1864條經驗 獲得超2個贊

與此答案類似,您可以使用列表理解。假設您的數據是干凈的,例如沒有空值。


zipper = zip(df['col1'], df['col2'])

df['status'] = [i.casefold() in j.casefold().split('|') for i, j in zipper]


print(df)


  col1   col2 status

0    A  a|x|y   True

1    B  a|x|y  False

2    C  c|x|z   True

3    D  e|j|y  False


查看完整回答
反對 回復 2021-09-02
?
www說

TA貢獻1775條經驗 獲得超8個贊

也許您應該首先將數據框轉換為更易于使用的格式。


我建議這樣的事情:


>>> df = pd.concat([df['col1'], df['col2'].str.upper().str.split('|', expand=True)], axis=1)                                                                                                             

>>> df                                                                                                                                                                                                   

  col1  0  1  2

0    A  A  X  Y

1    B  A  X  Y

2    C  C  X  Z

3    D  E  J  Y

現在你可以這樣做:


>>> df['status'] = df.apply(lambda s: s.duplicated().any(), axis=1)                                                                                                                                     

>>> df                                                                                                                                                                                                    

  col1  0  1  2  status

0    A  A  X  Y    True

1    B  A  X  Y   False

2    C  C  X  Z    True

3    D  E  J  Y   False

此解決方案假定您分隔的狀態指示器'|'是唯一的,即您不能擁有類似'x|x|x'.


如果您不喜歡該建議,請考慮:


>>> df['status'] = df.apply(lambda row: row[0].lower() in row[1].split('|'), axis=1)                                                                                                                     

>>> df                                                                                                                                                                                                  

   col1   col2  status

0    A  a|x|y    True

1    B  a|x|y   False

2    C  c|x|z    True

3    D  e|j|y   False


查看完整回答
反對 回復 2021-09-02
  • 3 回答
  • 0 關注
  • 195 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號