根据几列从熊猫数据框中删除行

问题描述 投票:0回答:1

[从熊猫数据框中,我想删除一半或更多的“ rois”行中的任何列s,b1或b2的值都小于50。

这里是一个示例数据框:

enter image description here

仅保留与roi 5相对应的三行(roi 4的3行中有2行s,b1,b2中的至少一个值小于50)。

我已经实现了此功能,但想知道是否有更短的时间(例如更快和清洁剂)的方法:

for roi in data.roi.unique():
            subdata = data[data['roi']==roi];
            subdatas = subdata[subdata['s']>=50];
            subdatab1 = subdatas[subdatas['b1']>=50];
            subdatab2 = subdatab1[subdatab1['b2']>=50]
            if((subdatab2.size/10)/(subdata.size/10) < 0.5):
                data = data[data['roi']!=roi];
python pandas
1个回答
1
投票

您可以一次使用多个过滤条件,以避免创建中间数据帧(提高空间复杂性,例如:

for roi in data.roi.unique():
  subdata2 = data[(data['roi']==roi) &
                  (data['s']>=50) &
                  (data['b2']>=50)]
  if (subdata2.size/10)/(data[data['roi']==roi].size/10) < 0.5:
      data = data[data['roi']!=roi]
© www.soinside.com 2019 - 2024. All rights reserved.