[英]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.