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

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

pandas 遍歷列以查找文本匹配項,一旦找到,比較兩個數據框中的相鄰行值 <>

pandas 遍歷列以查找文本匹配項,一旦找到,比較兩個數據框中的相鄰行值 <>

holdtom 2023-03-30 17:10:38
嘗試學習在 pandas 中迭代或循環遍歷列的方法。在 vba 中,這是一個 for 循環,然后從選定的單元格位置選擇偏移量,只有一個選項。但是,我來這里是為了學習熊貓,并且很難理解在比較下一列與右側相鄰或兩列相鄰時如何保持行的直線。也許可以這樣說的另一種方式。一旦在其他數據框 mtype 列中找到 ttype 列文本,我想將兩個數據框中的相鄰值相互比較。我附上了用于測試的數據框。我不確定 for 循環是否是實現此目的的最佳方法,但我已經開始了。我讀到 pandas 一次處理整個專欄的效率更高。不確定是否可以在這里完成。我的前 3 行代碼(2 個 for 循環和 if 語句)正在運行。它循環遍歷文本并找到匹配項。但我正在努力處理鄰接值。我已經閱讀了 iloc 和 loc 語句,因為我覺得它們搶占了行。但我不確定語法。我什至不確定我是否可以提出正確的問題來讓我到達我需要的地方,以便我可以學習。因此,如果您能幫助指導我了解這方面的任何閱讀材料,我們將不勝感激。pandas loc vs. iloc vs. ix vs. at vs. iat? 根據另一列獲取列值,其中包含 pandas 數據框中的字符串列表需要什么:對于 toc 數據框,我想循環遍歷 ttype 列中的每個值,如果 moc 數據框 mtype 列中存在值,則比較 toc[ta 列值] < moc[ma 列值],如果為真,則繼續,如果為假則 toc[outfilter] == '1'。import pandas as pdfrom pandas import DataFrame, Seriesimport numpy as nptoc = {'ttype':['ta1k', 'brek', 'sjfgd',           'gru2d','brek','crhe','ta1k','jump4'],       'ta':[1, 2, 9, 9, 2, 2, 1, 1],       'tc':[0, 1, 0, 0, 1, 0, 2, 0],       'outfilter':[0, 0, 0, 0,0, 0, 0, 0]}toc = pd.DataFrame(toc)moc = {'mtype':[ 'sjfgd','ta1k','gru2d',            'brek','crhe','jump4'],       'mo':[2, 2, 4, 4, 3, 4],       'ma':[2, 2, 4, 4, 2, 3],       'mc':[1, 1, 3, 3, 1, 1]}moc = pd.DataFrame(moc)#-----for tval in toc['ttype']:                          # Gets toc['ttype'].value    for mval in moc['mtype']:                      # Gets toc['mtype'].value        if t == m:                                 # compares if tval == mval            if toc.loc['ta'] < moc.loc['ma']:      # compares toc.[ta] column value < moc.[ma]                continue            else:                toc.loc['outfilter'] = '1'         # if the above is greater place '1' in outfilter                                                    #  column        else:            continue#----- print(toc) print(moc)我真的很感謝你們的幫助,我希望有一天我能回報你們的幫助,并將它付諸實踐。感謝您的時間。!?。∪绻腥魏螁栴},請告訴我。
查看完整描述

1 回答

?
神不在的星期二

TA貢獻1963條經驗 獲得超6個贊

  1. ttype我會合并和列上的數據框,mtype類似于在 Excel 中執行索引匹配/vlookup,但您不想合并整個moc數據框,因此只需指定并合并您需要的列 (mtypema)。

  2. 從那里,只需執行一個操作np.where以查看ta值是否大于ma值并返回10類似于 Excelif公式。

  3. 最后,刪除不需要的列

輸入:

import pandas as pd, numpy as np

toc = {'ttype':['ta1k', 'brek', 'sjfgd',

       'gru2d','brek','crhe','ta1k','jump4'],

   'ta':[1, 2, 9, 9, 2, 2, 1, 1],

   'tc':[0, 1, 0, 0, 1, 0, 2, 0],

   'outfilter':[0, 0, 0, 0,0, 0, 0, 0]}


toc = pd.DataFrame(toc)


moc = {'mtype':[ 'sjfgd','ta1k','gru2d',

        'brek','crhe','jump4'],

   'mo':[2, 2, 4, 4, 3, 4],

   'ma':[2, 2, 4, 4, 2, 3],

   'mc':[1, 1, 3, 3, 1, 1]}


moc = pd.DataFrame(moc)

代碼:


toc = pd.merge(toc,moc[['mtype','ma']],how='left',left_on='ttype',right_on='mtype')

toc['outfilter'] = np.where((toc['ta'] > toc['ma']),1,0)

toc = toc.drop(['mtype','ma'], axis=1)

toc

逐行分解代碼:


步驟 1(類似于 excelindex-match公式):


pd.merge(toc,moc[['mtype','ma']],how='left',left_on='ttype',right_on='mtype')


   ttype  ta  tc  outfilter  mtype  ma

0   ta1k   1   0          0   ta1k   2

1   brek   2   1          0   brek   4

2  sjfgd   9   0          0  sjfgd   2

3  gru2d   9   0          0  gru2d   4

4   brek   2   1          0   brek   4

5   crhe   2   0          0   crhe   2

6   ta1k   1   2          0   ta1k   2

7  jump4   1   0          0  jump4   3

第 2 步(類似于 excelIF公式):


toc['outfilter'] = np.where((toc['ta'] > toc['ma']),1,0)


    ttype  ta  tc  outfilter  mtype  ma

0   ta1k   1   0          0   ta1k   2

1   brek   2   1          0   brek   4

2  sjfgd   9   0          1  sjfgd   2

3  gru2d   9   0          1  gru2d   4

4   brek   2   1          0   brek   4

5   crhe   2   0          0   crhe   2

6   ta1k   1   2          0   ta1k   2

7  jump4   1   0          0  jump4   3

第 3 步 - 最終輸出(僅刪除不需要的列):


toc = toc.drop(['mtype','ma'], axis=1)


   ttype  ta  tc  outfilter

0   ta1k   1   0          0

1   brek   2   1          0

2  sjfgd   9   0          1

3  gru2d   9   0          1

4   brek   2   1          0

5   crhe   2   0          0

6   ta1k   1   2          0

7  jump4   1   0          0

如果我多想一點,可能有一種更簡單的方法可以在 python 中使用 pandas 方法僅使用一行 cod 來執行此操作,但這種方法足夠簡單且易于理解。


此外,VBA 也是我大約 18 個月前從 Pandas 切換到的語言。我會說 99% 的問題都可以用 pandas 方法、列表理解或.apply(lambda x:.... Pandas 方法或 numpy 方法在簡單性、速度、性能等方面始終是可行的方法。在 VBA 中循環非常流行,但您應該盡快擺脫它并學習各種 pandas方法。


查看完整回答
反對 回復 2023-03-30
  • 1 回答
  • 0 關注
  • 281 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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