我有一个像这样的数据框 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 - run - Trial。
我只想保留平均 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 似乎也不起作用,因为数据帧之间的索引和列不同。
还有其他方法可以做到这一点吗?
最佳答案
I want to retain only runs where mean acc is above 0.5
使用groupby
+ transform
,您可以使用单个 bool 系列进行索引:
df = df[df.groupby(['id', 'run'])['acc'].transform('mean') > 0.5]
关于python - Pandas - 保留与其他数据框中的两个单元格匹配的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54144671/