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

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

如何遍歷兩個數據幀來比較數據并進行處理?

如何遍歷兩個數據幀來比較數據并進行處理?

繁星淼淼 2023-06-13 11:08:47
我有兩個不同的數據框:A、B。事件列具有我用來比較兩個數據框的相似數據。我想給 Dataframe A 一個新列 dfA.newContext#。為此,我需要使用“事件”列。我想遍歷 Dataframe A 以找到 Event 的匹配項并將 dfB.context# 分配給 dfA.newContext#我認為循環是最好的方法,因為我需要檢查一些條件。這可能要求有點多,但我真的卡住了..我想做這樣的事情:offset = 0Iterate through dfA:    extract event    extract context#        Iterate through dfB:            if dfB.event == dfA.event:                dfA.newContext# = dfB.context#                offset = dfA.new_context# - dfA.context#                if dfB.event == "Special":                    dfA.newContext# = dfA.context# - offset         數據框A+-------------+---------+------+|dfA.context# |dfA.event| Name |+-------------+---------+------+| 0           | Special | Bob  || 2           | Special | Joan || 4           |    Bird | Susie|| 5           | Special | Alice|| 6           | Special | Tom  || 7           | Special | Luis || 8           |  Parrot | Jill || 9           | Special | Reed || 10          | Special | Lucas|| 11          |   Snake | Kat  || 12          | Special | Bill || 13          | Special | Leo  || 14          | Special | Peter|| 15          | Special | Mark || 16          | Special | Joe  || 17          | Special | Lora || 18          | Special | Care || 19          |Elephant | David|| 20          | Special | Ann  || 21          | Special | Larry|| 22          |   Skunk | Tony |+-------------+---------+------+數據框B+-------------+---------+|dfB.context# |dfB.event|+-------------+---------+| 0           | Special || 0           | Special || 0           | Special || 1           | Special || 1           | Special || 1           | Special || 1           | Special || 2           |    Bird || 2           |    Bird || 3           | Special || 6           |  Parrot || 6           |  Parrot || 6           |  Parrot || 6           |  Parrot || 7           | Special || 7           | Special || 9           |   Snake || 9           |   Snake || 9           |   Snake |+-------------+---------+
查看完整描述

1 回答

?
萬千封印

TA貢獻1891條經驗 獲得超3個贊

95% 的時間你可以使用 pandas 向量化方法并消除循環的需要。在這種情況下,您可以只使用pd.merge一個簡單、干凈且高效的方法來替代長循環。

編輯:(答案#1):實際上,您可以進行更高級的合并,left_on=dfA.index, right_on='context'并在合并后與其他清理操作一起在一行中執行此操作,但請參閱下面更完整的答案,它采用類似的方法:

df = (pd.merge(dfA, dfB['context'], how='left', left_on=dfA.index, right_on='context')
        .drop_duplicates()
        .dropna(subset=['Name'])
        .drop('context', axis=1)
        .rename({'context_x' : 'context', 'context_y' : 'newContext'}, axis=1).fillna(''))

答案 #2: 在為合并準備操作兩個數據幀之后,您可以將兩個數據幀合并在一起:

  1. dfA- 使contextdfA等于index,但在更改之前,將其保存為一個系列s以備后用

  2. dfB- 刪除重復項,重置索引,并將索引的名稱更改為newContext以準備合并。

  3. 合并event并用空值context替換newContext值。context

  4. 更改context回其原始數據df['context'] = s

s = dfA['context']

dfA['context'] = dfA.index.astype(str)

dfB = dfB.drop_duplicates().reset_index().rename({'index' :'newContext'}, axis=1).astype(str)

df = pd.merge(dfA, dfB, how='left', on=['event', 'context'])

df['newContext'] = df['newContext'].where(df['newContext'].isnull(), df['context']).fillna('')

df['context'] = s

df

Out[9]: 

    context     event   Name newContext

0         0   Special    Bob          0

1         2   Special   Joan          1

2         4      Bird  Susie          2

3         5   Special  Alice          3

4         6   Special    Tom           

5         7   Special   Luis           

6         8    Parrot   Jill          6

7         9   Special   Reed          7

8        10   Special  Lucas           

9        11     Snake    Kat          9

10       12   Special   Bill         10

11       13   Special    Leo           

12       14   Special  Peter           

13       15   Special   Mark           

14       16   Special    Joe           

15       17   Special   Lora           

16       18   Special   Care           

17       19  Elephant  David         17

18       20   Special    Ann         18

19       21   Special  Larry           

20       22     Skunk   Tony         20


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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