簡體   English   中英

Pandas 將 dataframe 的列重命名為另一個 dataframe 的值,如果兩個 Z6A8064B53C47945557755705 列的值匹配

[英]Pandas rename column of dataframe to value of another dataframe if values of two dataframe columns match

我有兩個數據框。

dfA 包含兩列“CCLE_ID”和“名稱”以及其他不重要的列

dfB 包含兩列“CCLE ID”和“細胞系”以及其他不重要的列。

現在,dfB['CCLE ID'] 值設置為 0。

我想要做的是比較dfA['Name']列和dfB['Cell line']列中的所有值。 它們都是字符串,代表細胞系的簡寫。 如果dfA['Name']dfB['Cell line']列的值匹配,那么我想用 dfA['CCLE_ID'] 列中的字符串替換dfA['CCLE_ID'] dfB['CCLE ID']列的值 0匹配的單元格名稱。

老實說,我對如何做到這一點感到迷茫(熊貓初學者)。

首先,我們假設 dfA 和 dfB 具有相同的行數,因為如果它們不具有相同的行數,那么它會更復雜,您有兩種選擇:要么重塑數據幀以具有相同的行數,要么使用其他 Python 庫來執行轉換.

基於數據幀具有相同行數的初始假設,我將嘗試逐步為您分解。

使用兩個數據dfAdfB ,首先合並數據。 您可以稍后從 dfB 中刪除額外的列。

為簡單起見,要將 dfA 列合並到 dfB 中,請添加兩列 dfaName 和 dfa_CCLE_ID。

dfB['dfaName'] = dfa['Name']
dfB['dfa_CCLE_ID'] = dfa['CCLE_ID']

然后使用pandas.dataFrame.apply()有條件地轉換您的數據。

dfB['CCLE_ID'] = dfB[['dfaName','Cell line', 'dfa_CCLE_ID']].apply(lambda x: x['dfa_CCLE_ID'] if x['dfaName']==x['Cell line'] else x, axis=1)

一個不錯的附加功能是使用dataframe 掩碼生成並查看比較。 這是查看和測試數據轉換的好步驟。 在此示例中,在 dfB 中創建一個額外的列,其中包含用於比較的真/假值。

dfB['column_matcher'] = dfb['dfaName']==dfB['Cell line']

暫無
暫無

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

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