使用 np.where 我能夠獲得 4 列 match1、match2、match3 和 match4。必須根據匹配 1、match2、match3 和 match4 的值更新最后一列 MATCHED。如果所有 4 列都是,那么我必須更新如果 4 個中有 3 個是“是”,則匹配為“是”,那么“是”也將被更新。否則,否。
final_data = final_data.copy()
final_data['Match1'] = np.where(final_data['PROCESSOR_sub_column'] == final_data['PROCESSOR_Title'] , 'Yes', 'No')
final_data['Match2'] = np.where( final_data['RAM'] == final_data['RAM_Title'] , 'Yes', 'No')
final_data['Match3'] = np.where( final_data['Storage'] == final_data['STORAGE_Title'] , 'Yes', 'No')
final_data['Match4'] = np.where( final_data['Storage Type'] == final_data['STORAGE_TYPE_Title'] , 'Yes', 'No')
if (final_data['Match1']&final_data['Match2']&final_data['Match3']&final_data['Match4'] == 'Yes'):
final_data[Matched] = 'Yes'
附加已經生成的資料作為螢屏截圖:資料看起來像這樣
我還嘗試使用 np.where() 直接獲取 Matched 列,但我沒有成功同時檢查四個條件。我也不知道在使用 4 個條件時我應該在 np.where(,x,y) 中作為 Xy 傳遞。
抱歉,如果這個問題是重復的,我已經盡力閱讀所有以前有關相關主題的帖子。
uj5u.com熱心網友回復:
您可以比較 的所有 4 列Yes,然后True按每行的總和計算s,并比較是否大于或等于3by Series.ge:
mask = df[['Match1','Match2','Match3','Match4']].eq('Yes').sum(axis=1).ge(3)
final_data['Matched'] = np.where(mask, 'Yes', 'No')
另一個沒有幫助列的解決方案 id 比較過濾的 DataFrame:
np.random.seed(2022)
c=['PROCESSOR_sub_column','RAM','Storage','Storage Type','PROCESSOR_Title',
'RAM_Title','STORAGE_Title','STORAGE_TYPE_Title']
final_data = pd.DataFrame(np.random.randint(2, size=(10,8)), columns=c)
df1 = final_data[['PROCESSOR_sub_column','RAM','Storage','Storage Type']]
df2 = final_data[['PROCESSOR_Title','RAM_Title','STORAGE_Title','STORAGE_TYPE_Title']]
mask = df1.eq(df2.to_numpy()).sum(axis=1).ge(3)
final_data['Matched'] = np.where(mask, 'Yes', 'No')
print (final_data)
PROCESSOR_sub_column RAM Storage Storage Type PROCESSOR_Title \
0 1 0 1 0 1
1 0 0 0 0 1
2 1 1 0 0 0
3 0 0 0 1 0
4 0 1 0 0 1
5 1 1 1 1 0
6 0 1 0 1 1
7 0 1 1 0 0
8 1 1 1 1 1
9 1 1 0 0 0
RAM_Title STORAGE_Title STORAGE_TYPE_Title Matched
0 1 0 1 No
1 1 1 1 No
2 1 0 1 No
3 0 0 1 Yes
4 1 1 1 No
5 0 0 0 No
6 0 0 0 No
7 1 0 1 No
8 1 0 1 Yes
9 0 1 0 No
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/409477.html
標籤:
上一篇:回圈洗掉熊貓資料框行
