我有兩個資料框架,我想根據df1的words的列值是否包含df2的keywords的列值來進行合并。我一直在嘗試使用str.extract。但是到目前為止,沒有得到預期的結果。下面的例子:
df1:
[{'id'/span>: 1, 'words': 'chellomedia'/span>, 'languages'/span>: nan},
{'id': 2, 'words': 'Moien Welt!', 'languages': ' Luxemburgish'},
{'id': 3, ' words': 'Ahoj světe! ', 'languages': 'Czech'},
{'id': 4, ' words': 'hello world', 'languages': nan},
{'id': 5, 'words': '?Hola Mundo!', 'languages': '西班牙語'}。
{'id': 6, ' words': 'hello kitty', 'languages': 'English'}。
{'id': 7, 'words': 'Ciao mondo!', 'languages': '意大利語'}。
{'id': 8, ' words': 'hola world', 'languages': nan}] 。
df2:
[{'code': 1, 'keywords': 'Hello'}。
{'code': 2, 'keywords': 'hola'}。
{'code': 3, 'keywords': 'world'}]
我的試用代碼:
df1['words'] = df1['words'].str.lower()
df2['keywords'] = df2['keywords'].str.lower()
pat = '|'.join([re.escape(x) for x in df2.keywords])
df1.insert(0, 'keywords', df1['word'].str. extract('(' pat ')', expand=False)
pd.merge(df1, df2, on='keywords'/span>, how='left'/span>)
輸出:
keywords id words languages code
0 hello 1 chellomedia NaN 1.0
1 NaN 2 moien welt! 盧森堡語 NaN
2 NaN 3 ahoj světe! 捷克語NaN
3 hello 4 hello world NaN 1.0
4 hola 5 ?hola mundo! 西班牙文 2.0
5 hello 6 hello kitty 英語 1.0
6 NaN 7 ciao mondo! 意大利語 NaN
7 hola 8 hola world NaN 2.0
但是想要的應該是這樣:
keywords id words languages code
0 hello 1 chellomedia NaN 1.0
1 NaN 2 moien welt! 盧森堡語 NaN
2 NaN 3 ahoj světe! 捷克語NaN
3 hello 4 hello world NaN 1.0
4 world 4 hello world NaN 3.0 --> 應該生成 in df
5 hola 5 ?hola mundo! 西班牙語 2.0
6 hello 6 hello kitty 英語 1.0
7 NaN 7 ciao mondo! 意大利語 NaN
8 hola 8 hola 世界 NaN 2.0
9 world 8 hola world NaN 3.0 --> 應該生成 in df
我怎樣才能生成預期的結果?謝謝。
uj5u.com熱心網友回復:
代替extract你必須使用findall和explode,例如:
df1.insert(0, 'keywords', df1['word']。 str.findall('(' pat ')')
print(pd.merge(df1.explode('keywords'/span>), df2, on='keywords'/span>, how='left'/span>)
.sort_values('id').reset_index(drop=True)
輸出:
keywords id words languages code
0 hello 1 chellomedia NaN 1.0
1 NaN 2 moien welt! 盧森堡語 NaN
2 NaN 3 ahoj světe! 捷克語NaN
3 hello 4 hello world NaN 1.0
4 world 4 hello world NaN 3.0
5 hola 5 ?hola mundo! 西班牙語 2.0
6 hello 6 hello kitty 英語 1.0
7 NaN 7 ciao mondo! 意大利語 NaN
8 世界 8 hola 世界 NaN 3.0
9 hola 8 hola world NaN 2.0
與你所需要的完全一樣 :)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/332329.html
標籤:
上一篇:過濾Json資料,沒有結果
