Pandas数据帧按另一数据帧中的值筛选行

2024-04-20 12:27:12 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有两个数据帧,它们的相关列是:

刺激数据帧:

   stimuli_id    rank         
0     23          0  
1     27          1 
2     62          2 
3     88          2 
4     99          1 

而“stimulis_id”是唯一的索引,“rank”是[0,2]范围内的整数。 试验数据框中的相关列为:

     stim1     stim2        
0     23         27
1     27         62   
2     62         99

而刺激1和刺激2都代表来自刺激数据帧的刺激

现在我想过滤试验数据框中第二个刺激的等级更高的所有行。 因此,过滤后的上述示例应如下所示:

       stim1     stim2        
0       62         99

所以最终只有在这个试验中,stim1大于stim2,其余的都不是,所以我们过滤它们

我尝试了以下方法:

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

我已经寻找了几个小时的解决方案,但没有找到任何有用的


Tags: 数据方法id示例错误代表整数loc
1条回答
网友
1楼 · 发布于 2024-04-20 12:27:12

由于'stimuli_id'是该数据帧的唯一键,因此使用序列来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

相关问题 更多 >