我有兩個表,我想在其中找到基于 Ticker 變數的外部聯接。
在表 I 中,每個物體(基金)只有一個Ticker,但在表 II 中,每個“FundID”可能有多個記錄(多個 Ticker)。目標是計算獨特的資金。
我想要表 III,它是基金級別的表 I 和 II 的組合。如果兩個表中都存在一個 Ticker,則認為這是表 III 中的一條記錄。如果在表 II 中存在 Ticker 但在表 I 中不存在,我希望它在表 III 中。
但是,我不想要來自同一個基金的另一個代碼(“FundID”)。在這種情況下,我們可能會從每個基金組中??隨機選擇一個代表性代碼(同樣,它們將具有相同的“FundID”),因此我們不會為一個特定基金提供多個代碼。
表格1:
| 股票代碼 |
|---|
| 一種 |
| 乙 |
| C |
| D |
表二:
| 股票代碼 | 基金編號 |
|---|---|
| 一種 | 1 |
| AA | 1 |
| AB | 1 |
| 乙 | 2 |
| BB | 2 |
| 乙 | 3 |
| EB | 3 |
| 歐共體 | 3 |
表三(合并):
| 股票代碼 |
|---|
| 一種 |
| 乙 |
| C |
| D |
| 乙 |
uj5u.com熱心網友回復:
您可以嘗試使用merge然后通過過濾器duplicated
out = t1.merge(t2,how='outer')
out = out[~out['FundID'].duplicated() | out['FundID'].isna()]
Out[87]:
Ticker FundID
0 A 1.0
1 B 2.0
2 C NaN
3 D NaN
7 E 3.0
uj5u.com熱心網友回復:
您可以首先過濾df2每個 FundID 中沒有對應的“Ticker”的行df1['Ticket']。然后在這些 FundID 中,為每個 FundID 采樣一個 Ticker 并將其連接到df1:
sub_df2 = df2[~df2['Ticker'].isin(df1['Ticket']).groupby(df2['FundID']).cummax()]
out = pd.concat((df1, sub_df2.groupby('FundID')['Ticker'].sample(n=1).to_frame().rename(columns={'Ticker':'Ticket'})))
輸出:
Ticket
0 A
1 B
2 C
3 D
5 E
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/432590.html
上一篇:SQL兩個連接;第一個是左連接;僅當組合尚不存在時才加入
下一篇:如何組合這些表以獲得正確的輸出?
