簡體   English   中英

Pandas 使用來自另一個 DataFrame 的多個列的查找添加新列

[英]Pandas Add New Column using Lookup using Multiple Columns from another DataFrame

我有兩個數據框。

df1 = pd.DataFrame({
    'id':[1,1,1,1,1,1,2,2,2,2,2,2], 
    'pp':[3,'',2,'',1,0,4, 3, 2, 1, '', 0], 
    'pc':[6,5,4,3,2,1,6,5,4,3,2,1]
})

|    |   id | pp   |   pc |
|---:|-----:|:-----|-----:|
|  0 |    1 | 3    |    6 |
|  1 |    1 |      |    5 |
|  2 |    1 | 2    |    4 |
|  3 |    1 |      |    3 |
|  4 |    1 | 1    |    2 |
|  5 |    1 | 0    |    1 |
|  6 |    2 | 4    |    6 |
|  7 |    2 | 3    |    5 |
|  8 |    2 | 2    |    4 |
|  9 |    2 | 1    |    3 |
| 10 |    2 |      |    2 |
| 11 |    2 | 0    |    1 |


df2 = pd.DataFrame({
    'id':[1,1,1,2,2,2], 
    'pp':['', 3, 4, 1, 2, ''], 
    'yu':[1,2,3,4,5,6]
})

|    |   id | pp   |   yu |
|---:|-----:|:-----|-----:|
|  0 |    1 |      |    1 |
|  1 |    1 | 3    |    2 |
|  2 |    1 | 4    |    3 |
|  3 |    2 | 1    |    4 |
|  4 |    2 | 2    |    5 |
|  5 |    2 |      |    6 |

我想將兩者合並,使最終結果看起來像這樣。

|    |   id | pp   | pc   |   yu |
|---:|-----:|:-----|:-----|-----:|
|  0 |    1 |      |      |    1 |
|  1 |    1 | 0    | 1    |    2 |
|  2 |    1 | 3    | 6    |    3 |
|  3 |    2 | 1    | 3    |    4 |
|  4 |    2 | 2    | 4    |    5 |
|  5 |    2 |      |      |    6 |

基本上, df1 具有我需要從中查找的值。 df2 是用於查找的 has idpp列。 但是,當我執行pd.merge(df2, df1, on=['id', 'pp'], how='left')

|    |   id | pp   |   pc |   yu |
|---:|-----:|:-----|-----:|-----:|
|  0 |    1 |      |    5 |    1 |
|  1 |    1 |      |    3 |    1 |
|  2 |    1 | 3    |    6 |    2 |
|  3 |    1 | 4    |  nan |    3 |
|  4 |    2 | 1    |    3 |    4 |
|  5 |    2 | 2    |    4 |    5 |
|  6 |    2 |      |    2 |    6 |

這是不正確的,因為它也會查看空行。 如果 df2 中的值為空,則應該沒有映射。

我確實想將空行保留在 df2 中,因為它顯示了所以不能使用inner join

我們可以在dropnadf1空行

out = pd.merge(df2, df1.replace({'':np.nan}).dropna(), on=['id', 'pp'], how='left')
Out[121]: 
   id pp  yu   pc
0   1      1  NaN
1   1  3   2  6.0
2   1  4   3  NaN
3   2  1   4  3.0
4   2  2   5  4.0
5   2      6  NaN

暫無
暫無

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

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