簡體   English   中英

Pandas 數據幀 - 按來自另一個數據幀的值過濾行

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

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