python - 在 2 个(或更多)值之间找到 DF 的第一个索引
问题描述
有了df
熊猫,如果可能的话,我希望第一个索引出现,"V1" | "V2"
而不必扫描所有的 DF。我可以让它在第一场比赛中停止吗?
我开始做i = df[(df["track"] == "V1") | (df["track"] == "V2")].iloc[0]
,但我得到了完整的行并且有一个列表。
解决方案
使用稍微改变了这个解决方案 - 用于测试使用in
运算符 - 它只循环匹配您的要求:
from numba import njit
@njit
def get_first_index_nb(A, k):
for i in range(len(A)):
if A[i] in k:
return i
return None
#pandas 0.24+
idx = get_first_index_nb(df.track.to_numpy(), ['V1', 'V2'])
#oldier pandas versions
#idx = get_first_index_nb(df.track.values, ['V1', 'V2'])
print (idx)
Series.idxmax
如果可能没有与if-else
语句匹配的值的解决方案and Series.any
,但它会测试所有匹配的值:
m = df.track.isin(['V1', 'V2'])
idx = m.idxmax() if m.any() else None
或者:
idx = next(iter(df.index[df.track.isin(['V1', 'V2'])]), None)
推荐阅读
- android - 仅来自三星 S5 设备的“SocketTimeoutException: failed to connect to”
- algorithm - 减少闭合轮廓中点数的已知算法
- python - 有没有办法在单个数据点内有多个绘图以与分类器一起使用?
- graphql - GraphQL 突变问题
- scala - 如何在 Scala 中区分 SortedMap 和 TreeMap?
- asp.net-core-mvc - 有条件地处理 ASP.NET Core 中的拒绝访问行为
- javascript - 如何始终在单击的元素下方打开 contextMenu?
- javascript - 无法在谷歌表单中设置依赖下拉
- ios - Xamarin iOS 在 UIButton 中显示图像和文本
- c# - 为什么在运行时调用重载函数时会发生 RuntimeBinderException?