熊猫-查找两个或多个满足条件的行

时间:2020-05-16 13:54:21

标签: pandas pandas-groupby

在此示例中,我具有用于在不同站点位置进行测试的记录。

lapply(trees_with_fossil, plot.phylo)

我需要标记网站的测试有2个或更多(失败)测试失败的行。

我认为这需要分组和计数,并提出以下建议:

df = pd.DataFrame({'test_id': [1,2,3,4,5,6,7,8, 9],
                   'name':['site1', 'site2', 'site3', 'site4', 'site1', 'site2', 'site3', 'site4', 'site5'],
                   'value':['elevated', 'ok', 'high', 'ok', 'elevated', 'elevated','elevated', 'elevated', 'ok']})


   test_id   name     value
0        1  site1  elevated
1        2  site4        ok
2        3  site2      high
3        4  site3        ok
4        5  site2  elevated
5        6  site1  elevated
6        7  site3        ok
7        8  site4  elevated
8        9  site5        ok


是否有更好的方法来解决此问题?我不是熊猫专家。

1 个答案:

答案 0 :(得分:3)

您的解决方案很好!尽管您可以通过摆脱lambda函数来加快速度,并且仅使用本机矢量化方法。

因此,我们首先得到一个布尔数组,其中所有行都不等于ok。然后,我们根据name进行分组,并使用sum为每个组获取transform。最后,我们检查哪些行带有sum > 1的{​​{1}},Series.gt代表greater than,例如>

df['flag'] = df['value'].ne('ok').groupby(df['name']).transform('sum').gt(1)

   test_id   name     value   flag
0        1  site1  elevated   True
1        2  site2        ok  False
2        3  site3      high   True
3        4  site4        ok  False
4        5  site1  elevated   True
5        6  site2  elevated  False
6        7  site3  elevated   True
7        8  site4  elevated  False
8        9  site5        ok  False