sk_provider我有 2 個資料框,我需要在它們之間description做一個左連接來帶來我解決這個?
第一個資料框:
| sk_provider | 提供者 |
|---|---|
| 1 | 郵箱 |
| 2 | 熱郵件/展望 |
| 3 | ig |
| 4 | 大地 |
| 5 | uol/bol/zipmail |
| 6 | 雅虎 |
| 7 | 結局 |
第二個資料框:
| 百分百 | 勇氣 | 提供者 | 型別 |
|---|---|---|---|
| 100% | 664 | 郵箱 | 羨慕 |
| 100% | 407 | 熱信 | 羨慕 |
| 100% | 1 | ig | 羨慕 |
| 100% | 15 | 大地 | 羨慕 |
| 100% | 43 | uol | 羨慕 |
| 100% | 74 | 雅虎 | 羨慕 |
預期輸出:
| 百分百 | 勇氣 | 提供者 | 型別 | sk_provider |
|---|---|---|---|---|
| 100% | 664 | 郵箱 | 羨慕 | 1 |
| 100% | 407 | 熱信 | 羨慕 | 2 |
| 100% | 1 | ig | 羨慕 | 3 |
| 100% | 15 | 大地 | 羨慕 | 4 |
| 100% | 43 | uol | 羨慕 | 5 |
| 100% | 74 | 雅虎 | 羨慕 | 6 |
uj5u.com熱心網友回復:
拆分分隔符周圍的列provider中的字串,然后拆分爆炸的資料框df1/explodeprovidermergedf2
df1['provider'] = df1['provider'].str.split('/')
df2.merge(df1.explode('provider'), on='provider', how='left')
porcentagem valor provider type sk_provider
0 100% 664 gmail enviados 1
1 100% 407 hotmail enviados 2
2 100% 1 ig enviados 3
3 100% 15 terra enviados 4
4 100% 43 uol enviados 5
5 100% 74 yahoo enviados 6
uj5u.com熱心網友回復:
我能夠使用 pandas 的 .explode 函式來嘗試重新設定您的第一個 df。這取決于您的提供程式列是否由 / 一致地分隔
data = {
'Column1' : [1, 2],
'Column2' : ['gmail', 'hotmail/outlook']}
df = pd.DataFrame(data)
df['emails'] = df['Column2'].apply(lambda x : x.split('/')[0:])
df1 = df.explode('emails')[['Column1', 'emails']]
這還需要您創建一個新的 df 來加入 (df1),因此在執行加入時要小心。
uj5u.com熱心網友回復:
2個步驟:
第 1 步:為每個提供者創建一行,由 / 分割
df1['providers'] = df1['provider'].str.split('/')
df1 = df.set_index(['sk_provider'])['providers'].apply(pd.Series).stack().reset_index().drop(columns=['level_1']).rename(columns={0:'provider'})
結果:
sk_provider provider
0 1 gmail
1 2 hotmail
2 2 outlook
3 3 ig
4 4 terra
5 5 uol
6 5 bol
7 5 zipmail
8 6 yahoo
9 7 outros
第 2 步:合并
pd.merge(df2, df1, left_on =['provider'], right_on=['provider'])
結果:
porcentagem valor provider type sk_provider
0 100% 664 gmail enviados 1
1 100% 407 hotmail enviados 2
2 100% 1 ig enviados 3
3 100% 15 terra enviados 4
4 100% 43 uol enviados 5
5 100% 74 yahoo enviados 6
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/444446.html
