Pandas中idxmax()无匹配条件时返回0的行为疑问及替代方案咨询
Pandas中idxmax()无匹配条件时返回0的行为疑问及替代方案咨询
最近我在使用Pandas的idxmax()方法时遇到了一个很反直觉的问题,想跟大家请教下:我本来想用它来筛选出DataFrame中第一个满足条件的行之后的所有数据,代码大概是这样的:
df = df[df['A'].gt(0).idxmax():]
我需要判断筛选后的结果是否为空,其中一个测试用例是没有任何行满足条件,但结果却永远不为空。查了之后发现,当条件完全不满足时,idxmax()居然返回了0——这就和「第一行正好满足条件」的情况结果完全一样,根本没法区分!
给大家看两个具体的示例:
情况1:没有任何行满足条件
import pandas as pd df = pd.DataFrame(data={'A':[0, 0, 0, 0]}) # 没有元素大于0 print("Truth values\n", df['A'].gt(0)) print("Index of first row where 'A' > 0: ", df['A'].gt(0).idxmax())
执行结果:
Truth values
0 False
1 False
2 False
3 False
Index of first row where 'A' > 0: 0
情况2:第一行满足条件
df2 = pd.DataFrame(data={'A':[1, 0, 0, 0]}) print("Truth values\n", df2['A'].gt(0)) print("Index of first row where 'A' > 0: ", df2['A'].gt(0).idxmax())
执行结果:
Truth values
0 True
1 False
2 False
3 False
Index of first row where 'A' > 0: 0
可以看到两种完全不同的输入,idxmax()返回的结果居然都是0,这就导致我无法正确区分两种场景。
我目前的临时解决办法是先对列'A'求和,判断是否为0来区分两种情况,但总觉得这种方法有点冗余。
想请教大家,是不是我用idxmax()的方式不对?为什么它会有这种反直觉的行为?有没有更优雅的替代方案呢?谢谢大家!
备注:内容来源于stack exchange,提问作者Xhattam
相关产品推荐
相关产品推荐

