在此示例中,我具有用于在不同站点位置进行测试的记录。
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
是否有更好的方法来解决此问题?我不是熊猫专家。
答案 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