簡體   English   中英

如何根據 dataframe B 中的值為 dataframe A 中的單元格分配值,條件是 B 中其他兩列的值?

[英]How to assign a value to a cell in dataframe A based on a value in dataframe B, conditional on values of two other columns in B?

對於 python 和 pandas,我真的是業余水平,但我正在嘗試解決一個讓我難過的工作問題。

我有兩個數據框,我們稱它們為 dfA 和 dfB:

dfA:

     project_id    Category     Initiative

     10              
     20
     30
     40

dfB:

     project_id     field_id     value  
     10             100          lorem
     10             200          lorem1
     10             300          lorem2

     20             200          ipsum
     20             300          ipsum1
     20             500          ipsum2

假設我知道 dfA 中的“類別”與 dfB 中的 field_id“100”相關,而“Initiative”與 field_id“200”相關。

我需要查看 dfB,對於給定的 project_id/field_id 組合,在“value”列中獲取相應的值並將其放在 dfA 中的正確單元格中。

結果將如下所示:

dfA:

     project_id    Category     Initiative

     10            lorem        lorem1
     20                         ipsum
     30
     40

額外難度:不是dfA中的每個項目都存在於dfB中,也不是每個field_id都在每個project_id中使用。

我希望我已經解釋得足夠好; 我覺得必須有一種相對簡單的方法來處理我缺少的這個問題。

你可以做這樣的事情,雖然它不是很優雅,但必須有更好的方法。 由於項目 ID 在 dfB 中不可用的情況,我不得不使用 try/except。 我為缺失的值輸入了 NaN 值,但您可以輕松輸入空字符串。

def get_value(row):
    try:
        res = dfB[(dfB['field_id'] == 100) & (dfB['project_id'] == row['project_id'])]['value'].iloc[0]
    except:
        res = np.nan
    row['Categorie'] = res
    try:
        res = dfB[(dfB['field_id'] == 200) & (dfB['project_id'] == row['project_id'])]['value'].iloc[0]
    except:
        res = np.nan
    row['Initiative'] = res
    return row

dfA = dfA.apply(get_value, axis=1)

暫無
暫無

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

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