熊猫-保留与其他数据框中两个单元格匹配的行

时间:2019-01-11 10:29:17

标签: python pandas

我有一个这样的数据框df:

    trial  id  run        rt  acc
0       1   1    1  0.941836    1
1       2   1    1  0.913791    1
2       3   1    1  0.128986    1
3       4   1    1  0.155720    0
4       1   1    2  0.414175    0
5       2   1    2  0.699326    1
6       3   1    2  0.781877    1
7       4   1    2  0.554666    1

每个id有2个运行,每个运行有70多个试验。每行包含一个试验。因此,层次结构是id-运行-试用。

我只想保留平均acc大于0.5的运行,所以我使用了temp = df.groupby(['id', 'run']).agg(np.average)keep = temp[temp['acc']] > 0.5

现在,我要从不保留的运行中删除所有试验。

我尝试使用df[df['id'].isin(keep['id'])&df['run'].isin(keep['run'])],但这似乎无法正常工作。 df.query似乎也不起作用,因为数据框之间的索引和列不同。 还有另一种方法吗?

1 个答案:

答案 0 :(得分:0)

  

我只保留平均acc大于0.5的运行

使用groupby + transform,您可以使用单个布尔系列进行索引:

df = df[df.groupby(['id', 'run'])['acc'].transform('mean') > 0.5]