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

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

將 Pandas df1 的每一行與 df2 中的每一行進行比較,并從最接近的匹配列返回字符串值

將 Pandas df1 的每一行與 df2 中的每一行進行比較,并從最接近的匹配列返回字符串值

慕桂英546537 2022-10-06 16:21:53
我有兩個數據框。df1 包括 4 名男性和 4 名女性的體重和身高(英寸)。#df1John, 236, 76Jack, 204, 74Jim, 156, 71Jared, 182, 72Suzy, 119, 60Sally, 149, 66Sharon, 169, 65Sammy, 182, 75df2 包括 4 名男性和 4 名女性的體重和身高(英寸)。#df2Aaron, 285, 77Abe, 236, 75Alex, 178, 72Adam, 195, 71Mary, 148, 66Maylee, 155, 66Marilyn, 199, 65Madison, 160, 73我想要做的是讓來自 df1 的男性與來自 df2 的男性進行比較,以根據身高和體重查看他們最喜歡的人。只需從體重中減去體重,從身高中減去身高,然后返回 df2 中每個人的絕對值。更具體地說,返回最相似的人的名字。所以在這種情況下,約翰最接近的匹配是 Abe 所以在一個新的列 df1['doppelganger'] = "Abe"中。我是一個初學者愛好者,所以即使指出我正確的方向也會有所幫助。我一直在查看堆棧溢出大約五個小時,試圖弄清楚如何處理這樣的事情。
查看完整描述

1 回答

?
米琪卡哇伊

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

首先是需要區分menwomen,這里使用了重復4次的新列mf。然后DataFrame.merge通過新列與所有組合的外部連接一起使用,并為差異創建新列,最后一列是sum其中的列。然后按 3 列排序DataFrame.sort_values,因此每組的第一行按Ag過濾DataFrame.drop_duplicates


df = (df1.assign(g = ['m']*4 + ['f']*4)

          .merge(df2.assign(g = ['m']*4 + ['f']*4), on='g', how='outer', suffixes=('','_'))

          .assign(dif1 = lambda x: x['B'].sub(x['B_']).abs(),

                  dif2 = lambda x: x['C'].sub(x['C_']).abs(),

                  sumdiff = lambda x: x['dif1'] + x['dif2'])

          .sort_values(['A', 'g','sumdiff'])

          .drop_duplicates(['A','g'])

          .sort_index()

          .rename(columns={'A_':'doppelganger'})

          )

print (df)

         A    B   C  g doppelganger   B_  C_  dif1  dif2  sumdiff

1     John  236  76  m          Abe  236  75     0     1        1

7     Jack  204  74  m         Adam  195  71     9     3       12

10     Jim  156  71  m         Alex  178  72    22     1       23

14   Jared  182  72  m         Alex  178  72     4     0        4

16    Suzy  119  60  f         Mary  148  66    29     6       35

20   Sally  149  66  f         Mary  148  66     1     0        1

25  Sharon  169  65  f       Maylee  155  66    14     1       15

31   Sammy  182  75  f      Madison  160  73    22     2       24

輸入數據幀:


print (df1)    

        A    B   C

0    John  236  76

1    Jack  204  74

2     Jim  156  71

3   Jared  182  72

4    Suzy  119  60

5   Sally  149  66

6  Sharon  169  65

7   Sammy  182  75


print (df2)

         A    B   C

0    Aaron  285  77

1      Abe  236  75

2     Alex  178  72

3     Adam  195  71

4     Mary  148  66

5   Maylee  155  66

6  Marilyn  199  65

7  Madison  160  73


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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