Python 在不同的组中查找特定值的第一个匹配项
我有一个玩具数据框,我有一列精度值和另一列组ID。我希望我能得到位置索引,对于每个组,精度值达到0.9。有人能帮忙吗Python 在不同的组中查找特定值的第一个匹配项,python,pandas,Python,Pandas,我有一个玩具数据框,我有一列精度值和另一列组ID。我希望我能得到位置索引,对于每个组,精度值达到0.9。有人能帮忙吗 df = pd.DataFrame({"acc":[0.6,0.9,0.5,0.1,0.9,0.9], "id":[1,1,1, 2,2,2]}) 理想情况下,在这种情况下,我希望它返回索引位置1,4。检查删除重复项 idx = df[df.acc.eq(0.9)].drop_duplicates(
df = pd.DataFrame({"acc":[0.6,0.9,0.5,0.1,0.9,0.9],
"id":[1,1,1, 2,2,2]})
理想情况下,在这种情况下,我希望它返回索引位置1,4。检查
删除重复项
idx = df[df.acc.eq(0.9)].drop_duplicates('id').index
Out[64]: Int64Index([1, 4], dtype='int64')
检查
删除重复项
idx = df[df.acc.eq(0.9)].drop_duplicates('id').index
Out[64]: Int64Index([1, 4], dtype='int64')
以下代码为每个
id
查找acc
超过阈值的最早索引:
threshold = 0.9
df[df['acc'] >= threshold]\
.sort_index()\
.drop_duplicates(subset='id', keep='first')\
.index
threshold = 0.9
df[df['acc'] >= threshold]\
.sort_values(by='acc', ascending=True)\
.drop_duplicates(subset='id', keep='first')\
.index
不确定这两种方法之间的性能差异是什么,但实现相同结果的另一种方法是:
df.groupby('id').apply(lambda x: x[x['acc'] >= threshold].index.min()))
通过对第3行中的acc
进行排序,我们可以发现,对于每个id
,acc
首先穿过阈值的索引:
threshold = 0.9
df[df['acc'] >= threshold]\
.sort_index()\
.drop_duplicates(subset='id', keep='first')\
.index
threshold = 0.9
df[df['acc'] >= threshold]\
.sort_values(by='acc', ascending=True)\
.drop_duplicates(subset='id', keep='first')\
.index
以下代码为每个id
查找acc
超过阈值的最早索引:
threshold = 0.9
df[df['acc'] >= threshold]\
.sort_index()\
.drop_duplicates(subset='id', keep='first')\
.index
threshold = 0.9
df[df['acc'] >= threshold]\
.sort_values(by='acc', ascending=True)\
.drop_duplicates(subset='id', keep='first')\
.index
不确定这两种方法之间的性能差异是什么,但实现相同结果的另一种方法是:
df.groupby('id').apply(lambda x: x[x['acc'] >= threshold].index.min()))
通过对第3行中的acc
进行排序,我们可以发现,对于每个id
,acc
首先穿过阈值的索引:
threshold = 0.9
df[df['acc'] >= threshold]\
.sort_index()\
.drop_duplicates(subset='id', keep='first')\
.index
threshold = 0.9
df[df['acc'] >= threshold]\
.sort_values(by='acc', ascending=True)\
.drop_duplicates(subset='id', keep='first')\
.index
df.index[df.acc==0.9]
?你是对的,但也许我给出了一个糟糕的例子,我更新了它。由于我希望在每组中选取第一个出现的0.9,因此在本例中,我希望它返回1,4。想法请?df.index[df.acc==0.9]
?你是对的,但也许我给出了一个糟糕的例子,我更新了它。由于我希望在每组中选取第一个出现的0.9,因此在本例中,我希望它返回1,4。有什么好主意吗?谢谢,很有效!你能帮我把代码拆开一点吗?.acc.eq(0.9)
是否发现第一个值等于0.9?drop\u duplicates
是否删除不需要的行?drop\u duplicates将只保留每个id的第一个不重复值,即第一个索引与值0.9@EdwardLinnice匹配,如果我们想添加另一个条件,如另一个指标的阈值,比如所花费的时间,我们如何编写条件?谢谢,它可以工作!你能帮我把代码拆开一点吗?.acc.eq(0.9)
是否发现第一个值等于0.9?那么,drop_duplicates
是否删除不需要的行?drop_duplicates将只保留每个id的第一个不重复值,即第一个索引与值0.9@EdwardLinnice匹配,如果我们想添加另一个条件,如另一个指标的阈值,比如所花费的时间,我们如何编写条件?nice,如果我们想添加另一个条件,比如另一个指标的阈值,比如说花费的时间,我们如何编写条件?(刚刚意识到我不能在注释中输入多行…)我的第一个猜测是尝试修改过滤操作,例如,df[(df['var1']>=threshold_1)&(df['var2']很好,如果我们想添加另一个条件,比如另一个指标的阈值,比如说花费的时间,我们如何编写条件?(刚刚意识到我不能在注释中输入多行…)我的第一个猜测是尝试修改过滤操作,例如,df[(df['var1']>=threshold_1)&(df['var2']