簡體   English   中英

在一個 dataframe 的一列中從另一個 dataframe 的另一列中查找字符串

[英]Find strings in a column of one dataframe from another column in a different dataframe

我正在嘗試創建一個映射文件。 主要問題是通過使用一列來比較兩個數據幀,然后返回兩個數據幀中所有匹配字符串的文件以及數據幀中的一些列。

示例數據

df1 = pd.DataFrame({
    'Artist':
    ['50 Cent', 'Ed Sheeran', 'Celine Dion', '2 Chainz', 'Kendrick Lamar'],
    'album':
    ['Get Rich or Die Tryin', '+', 'Courage', 'So Help Me God!', 'DAMN'],
    'album_id': ['sdf34', '34tge', '34tgr', '34erg', '779uyj']
})

df2 = pd.DataFrame({
    'Artist': ['Beyonce', 'Ed Sheeran', '2 Chainz', 'Kendrick Lamar', 'Jay-Z'],
    'Artist_ID': ['frd345', '3te43', '32fh5', '235he', '345fgrt6']
})

所以主要的想法是創建一個 function 來提供一個映射文件,該文件將從 df1 的藝術家姓名列中獲取一個項目,然后檢查 df2 藝術家姓名列以查看是否有任何相似之處,然后創建一個包含相似藝術家列的映射 dataframe ,album_id 和 artist_id。

我嘗試了下面的代碼,但我是 python 的新手,所以我在 function 中迷路了。我希望能在新的 function 上獲得一些幫助,或者在我嘗試做的事情上有所建樹。 謝謝!

我未能構建的代碼:

def get_mapping_file(df1, df2):
# I don't know what I'm doing :'D
    for i in df2['Artist']:
        if i == df1['Artist'].any():
            name = i
            df1_id = df1.loc[df1['Artist'] == name, ['album_id']]
            id_to_use = df1_id.album_id[0]
            df2.loc[df2['Artist'] == i, 'Artist_ID'] = id_to_use
    return df2

所需的 output 是:

藝術家 藝術家_ID 專輯編號
艾德·希蘭 3te43 34tge
雙鏈大師 32fh5 34erg
肯德里克·拉馬爾 235he 779uyj

我不確定這是否真的是您所需要的,但是您想要的 output 是兩個數據幀之間的內部連接:

pd.merge(df1, df2, on='Artist', how='inner')

這將為您提供兩個數據框中都存在的藝術家的行。

對我來說,很容易找到那個結果。 所以你可以這樣做:

frame = df1.merge(df2, how='inner')

frame = frame.drop('album', axis=1)

然后你就會得到你的結果。 謝謝 !

暫無
暫無

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

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