[英]Pandas data frame - filter rows by values from another data frame
假設我有兩個 pandas 數據幀,它們的相關列是:
刺激數據框:
stimuli_id rank
0 23 0
1 27 1
2 62 2
3 88 2
4 99 1
而“stimuli_id”是唯一索引,“rank”是 [0,2] 范圍內的 integer。 試驗數據框中的相關列是:
stim1 stim2
0 23 27
1 27 62
2 62 99
而 stim1 和 stim2 都代表來自刺激數據幀的 stimuli_id。
現在我想過濾試驗數據框中第二個刺激的等級更大的所有行。 所以上面過濾后的例子應該是這樣的:
stim1 stim2
0 62 99
所以最終只有這個試驗stim1大於stim2,而rest不是所以我們過濾它們。
我嘗試了以下方法:
trials.loc[stimuli.loc[stimuli["stimuli id"] == trials["stim1"]].iloc[0]["rank"] > stimuli.loc[stimuli["stimuli id"] == trials["stim2"]].iloc[0]["rank"]]
但是出現了一個值錯誤:
{ValueError}Can only compare identically-labeled Series objects
我一直在尋找任何解決方案幾個小時,但沒有發現任何幫助。
由於'stimuli_id'
是 DataFrame 的唯一鍵,因此請使用map
的系列對不同的 stim 列進行排名並檢查比較。 (通過“第二個刺激的等級更大”我假設你的意思是一個較小的數字)。
s = stimuli.set_index('stimuli_id')['rank']
trials[trials['stim2'].map(s) < trials['stim1'].map(s)]
# stim1 stim2
#2 62 99
通過映射每一列,我們在邏輯上創建具有以下比較的掩碼:
#rank2 rank1
# 1 < 0 # False
# 2 < 1 # False
# 1 < 2 # True
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.