更有效的利用Pandas的方法?

2024-04-29 10:42:12 发布

您现在位置:Python中文网/ 问答频道 /正文

任务:在多列数据帧中搜索一个值(所有值都是唯一的),并返回该行的索引。在

当前:使用get_loc,但它似乎一次只允许传递一个列,导致try except语句集非常无效。虽然它有效,有人知道一个更有效的方法来做到这一点吗?在

df =  pd.DataFrame(np.random.randint(0,100,size=(4, 4)), columns=list('ABCD'))
try: 
     unique_index = pd.Index(df['A'])
     print(unique_index.get_loc(20))
except KeyError:
    try: 
        unique_index = pd.Index(df['B'])
        print(unique_index.get_loc(20))
    except KeyError:
                unique_index = pd.Index(df['C'])
                print(unique_index.get_loc(20))

循环似乎不起作用,因为如果列不包含值,则会引发KeyError。我已经看过.contains或.isin等函数,但我感兴趣的是位置索引。在


Tags: 数据方法dataframedfgetindex语句loc
3条回答

考虑这个例子,而不是使用np.random.seed

np.random.seed([3, 1415])
df = pd.DataFrame(
    np.random.randint(200 ,size=(4, 4)),
    columns=list('ABCD'))

df

     A    B    C    D
0   11   98  123   90
1  143  126   55  141
2  139  141  154  115
3   63  104  128  120

我们可以使用np.where和切片来查找值的位置。请注意,我使用了一个值55,因为我从所选种子中获得的数据中包含的内容。如果20在您的数据集中,这将很好地工作。事实上,如果你有一个以上的话,它会起作用的。在

^{pr2}$

您可以使用^{},它返回一个包含行和列索引的元组,其中包含您的值。然后您可以从中只选择行。在

df =  pd.DataFrame(np.random.randint(0,100,size=(4, 4)), columns=list('ABCD'))
indices = np.where(df.values == 20)
rows = indices[0]
if len(rows) != 0:
    print(rows[0])

使用矢量化操作和布尔索引:

df[(df==20).any(axis=1)].index

相关问题 更多 >