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

标签 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 - 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/

相关文章:

python - Pandas read_excel 百分比作为字符串

python - 如何处理列表推导中的异常?

python - 为什么 'or'只使用python中的第一个值?

python - 何时在 pandas 中使用多索引与 xarray

python pandas滚动窗口并重新创建数据框

python - 将不同的条目拆分成单独的行,只允许某些组合

python - Pandas pivot_table 按值对列进行分组

python - Twisted 有什么了不起的?

python - 创建循环赛,替代解决方案?

python - 自定义 matplotlib 图